IDBTransaction: abort() メソッド

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 インターフェイスの abort() メソッドは、このトランザクションに関連するデータベース内のオブジェクトへのすべての変更をロールバックします。

このトランザクション中に生成されたすべての実行待ちの IDBRequest オブジェクトは、IDBRequest.error 属性を AbortError DOMException に設定されます。

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

構文

js
abort()

引数

なし

返値

なし (undefined)

例外

InvalidStateError DOMException

トランザクションが既にコミットまたはアボートされているとき投げられます。

以下のコード断片では、データベースの読み書きトランザクションを開き、オブジェクトストアにデータを追加します。トランザクションのイベントハンドラーに設定された関数により、成功時または失敗時にトランザクションを開いた結果を報告する点にも注目してください。最後に、abort() を用いて現在のトランザクションにおけるすべてのアクティビティをアボートします。動く例全体は、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>トランザクションはエラーのため開けませんでした。アイテムは重複させられません。</li>";
  };

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

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

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

  // 今行ったトランザクションをアボートする
  transaction.abort();
}

仕様書

Specification
Indexed Database API 3.0
# ref-for-dom-idbtransaction-abort②

ブラウザーの互換性

BCD tables only load in the browser

関連情報