IDBTransaction: error プロパティ

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2021.

IDBTransaction インターフェイスの IDBTransaction.error プロパティは、トランザクションが失敗したときにエラーの種類を返します。

メモ: この機能はウェブワーカー内で利用可能です。

関連するエラーが入った DOMException を返すか、エラーが無いときは null を返します。

エラーを発生させた要求オブジェクトと同じエラーの参照であることも、トランザクションの失敗 (QuotaExceededError など) であることもあります。

トランザクションが完了していないか、正常にコミットして完了した場合は、このプロパティは null です。

以下のコード断片では、データベースの読み書きトランザクションを開き、オブジェクトストアにデータを追加します。トランザクションのイベントハンドラーに設定した関数により、成功時または失敗時にトランザクションを開いた結果を報告する点にも注目してください。transaction.onerror = (event) => { }; ブロックに注目してください。これは、トランザクションの失敗時何がいけなかったのかを報告する助けとして transaction.error を用いています。動く例全体は、To-do Notifications アプリケーションを参照してください。(動く例を見る)

js
const note = document.getElementById("notifications");

// IDB データを保存する db オブジェクトのインスタンス
let db;

// データベースを開く
const DBOpenRequest = window.indexedDB.open("toDoList", 4);

DBOpenRequest.onsuccess = (event) => {
  note.innerHTML += "<li>データベースを初期化しました。</li>";

  // データベースを開いた結果を変数 db に保存する
  // これは後でよく使う
  db = DBOpenRequest.result;

  // addData() 関数を実行し、データベースにデータを追加する
  addData();
};

function addData() {
  // IDB に挿入できる新しいオブジェクトを生成する
  const newItem = [
    {
      taskTitle: "Walk dog",
      hours: 19,
      minutes: 30,
      day: 24,
      month: "December",
      year: 2013,
      notified: "no",
    },
  ];

  // データベースの読み書きトランザクションを開き、データを追加する準備をする
  const transaction = db.transaction(["toDoList"], "readwrite");

  // トランザクションを開くのに成功したら報告する
  transaction.oncomplete = (event) => {
    note.innerHTML +=
      "<li>トランザクション完了: データベースの変更が完了しました。</li>";
  };

  transaction.onerror = (event) => {
    note.innerHTML += `<li>以下のエラーによりトランザクションを開けませんでした: ${transaction.error}</li>`;
  };

  // トランザクション上でオブジェクトストアを生成する
  const objectStore = transaction.objectStore("toDoList");

  // オブジェクトストアに newItem オブジェクトを追加する
  const objectStoreRequest = objectStore.add(newItem[0]);

  objectStoreRequest.onsuccess = (event) => {
    // 要求の成功を報告する (これは、アイテムがデータベースにに正常に格納されたことを意味しません。
    // これを知るには、transaction.onsuccess を用いる必要があります)
    note.innerHTML += "<li>要求に成功しました。</li>";
  };
}

仕様書

Specification
Indexed Database API 3.0
# ref-for-dom-idbtransaction-error①

ブラウザーの互換性

BCD tables only load in the browser

関連情報