IDBTransaction: mode プロパティ
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
インターフェイスの読み取り専用プロパティ mode
は、トランザクションの対象におけるオブジェクトストア内のデータにアクセスする現在のモードを返します。(すなわち、モードが読み取り専用なのか、オブジェクトストアに書き込みを行いたいか) デフォルト値は readonly
です。
メモ: この機能はウェブワーカー内で利用可能です。
値
現在のオブジェクトストア内のデータへのアクセスを分離するためのモードを定義するオブジェクトです。 すなわち、現在のオブジェクトストア内のデータへのアクセスを分離するためのモードを定義する文字列です。 以下の値をとりえます。
readonly
-
データの読み込みはできますが、変更はできません。
readwrite
-
変更対象の既存のデータストア内のデータの読み書きができます。
versionchange
-
オブジェクトストアやインデックスの削除と作成を含む、任意の操作ができます。 このモードは、
IDBDatabase.setVersion()
により開始されたトランザクションでバージョン番号を更新する用です。 このモードのトランザクションは、他のトランザクションと並行で実行することはできません。 このモードのトランザクションは、アップグレードトランザクション として知られています。
例
以下のコード断片では、データベースの読み書きトランザクションを開き、オブジェクトストアにデータを追加します。トランザクションのイベントハンドラーに設定された関数により、成功時または失敗時にトランザクションを開いた結果を報告する点にも注目してください。最後に、mode
を用いて現在のトランザクションのモードを記録します。動く例全体は、To-do Notifications アプリケーションを参照してください。(動く例を見る)
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>";
};
// トランザクションが開かれたモードを返す (この場合は "readwrite" のはず)
transaction.mode;
}
仕様書
Specification |
---|
Indexed Database API 3.0 # ref-for-dom-idbtransaction-mode① |
ブラウザーの互換性
BCD tables only load in the browser
関連情報
- IndexedDB の使用
- トランザクションの開始:
IDBDatabase
- トランザクションの使用:
IDBTransaction
- キー範囲の設定:
IDBKeyRange
- データの取得と変更:
IDBObjectStore
- カーソルの使用:
IDBCursor
- リファレンス例: To-do Notifications (動く例を見る)