IDBCursor: update() 方法
注意:此功能在 Web Workers 中可用。
update() 方法是 IDBCursor 介面的一部分,它會返回一個 IDBRequest 物件,並在一個單獨的執行緒中更新物件儲存中游標當前位置的值。如果游標指向一個剛剛被刪除的記錄,那麼會建立一個新記錄。
請注意,你不能對從 IDBIndex.openKeyCursor() 獲取的游標呼叫 update() (或 IDBCursor.delete())。對於這些需求,你應該改用 IDBIndex.openCursor()。
語法
update(value)
引數
value-
要儲存在當前位置的新值。
返回值
一個 IDBRequest 物件,後續與此操作相關的事件會在此物件上觸發。
如果操作成功,請求的 result 屬性的值將是已更新記錄的鍵。
異常
此方法可能會丟擲以下型別之一的DOMException:
TransactionInactiveErrorDOMException-
如果此 IDBCursor 的事務不活躍,則丟擲此錯誤。
ReadOnlyErrorDOMException-
如果事務模式是隻讀,則丟擲此錯誤。
InvalidStateErrorDOMException-
如果游標是使用
IDBindex.openKeyCursor建立的,當前正在迭代,或者已經迭代到末尾之後,則丟擲此錯誤。 DataErrorDOMException-
如果底層物件儲存使用內聯鍵,並且物件儲存鍵路徑中值中的屬性與游標當前位置的鍵不匹配,則丟擲此錯誤。
DataCloneErrorDOMException-
如果正在儲存的資料無法透過內部結構化克隆演算法進行克隆,則會丟擲此異常。
示例
在這個簡單的程式碼片段中,我們建立了一個事務,檢索了一個物件儲存,然後使用游標迭代物件儲存中的所有記錄。如果當前游標的 albumTitle 是“A farewell to kings”,我們將使用 const request = cursor.update(); 更新專輯發行的年份。
請注意,你不能使用 cursor.update() 來更改主鍵,因此我們沒有更改專輯標題;這會破壞資料的完整性。在這種情況下,你必須先刪除該記錄,然後使用 IDBObjectStore.add 新增一個新記錄。另請注意,你不能直接將 cursor.value 傳遞給 update 呼叫,因此下面的示例使用了一箇中間變數 updateData。
游標不需要我們根據鍵來選擇資料;我們可以直接獲取所有資料。另請注意,在迴圈的每次迭代中,你可以使用 cursor.value.foo 從游標物件下的當前記錄中獲取資料。有關完整的可工作示例,請參閱我們的 IDBCursor 示例(線上檢視示例)。
function updateResult() {
list.textContent = "";
const transaction = db.transaction(["rushAlbumList"], "readwrite");
const objectStore = transaction.objectStore("rushAlbumList");
objectStore.openCursor().onsuccess = (event) => {
const cursor = event.target.result;
if (cursor) {
if (cursor.value.albumTitle === "A farewell to kings") {
const updateData = cursor.value;
updateData.year = 2050;
const request = cursor.update(updateData);
request.onsuccess = () => {
console.log("A better album year?");
};
}
const listItem = document.createElement("li");
listItem.textContent = `${cursor.value.albumTitle}, ${cursor.value.year}`;
list.appendChild(listItem);
cursor.continue();
} else {
console.log("Entries displayed.");
}
};
}
規範
| 規範 |
|---|
| Indexed Database API 3.0 # ref-for-dom-idbcursor-update① |
瀏覽器相容性
載入中…
另見
- 使用 IndexedDB
- 開始事務:
IDBDatabase - 使用事務:
IDBTransaction - 設定鍵的範圍:
IDBKeyRange - 檢索和修改資料:
IDBObjectStore - 使用遊標:
IDBCursor - 參考示例:待辦事項通知(檢視即時示例)。