IDBCursor: delete() 方法
注意:此功能在 Web Workers 中可用。
delete() 方法屬於 IDBCursor 介面,它會返回一個 IDBRequest 物件,並在一個單獨的執行緒中刪除遊標位置上的記錄,而不會改變遊標的位置。記錄刪除後,遊標的值會被設定為 null。
請注意,您不能在從 IDBIndex.openKeyCursor() 獲取的遊標上呼叫 delete()(或 IDBCursor.update())。對於此類需求,您應該改用 IDBIndex.openCursor()。
語法
js
delete()
引數
無。
返回值
一個 IDBRequest 物件,後續與此操作相關的事件會在此物件上觸發。
如果操作成功,請求的 result 屬性的值將為 undefined。
異常
此方法可能會丟擲以下型別之一的DOMException:
TransactionInactiveErrorDOMException-
如果此 IDBCursor 的事務不活躍,則丟擲此錯誤。
ReadOnlyErrorDOMException-
如果事務模式是隻讀的,則丟擲此錯誤。
InvalidStateErrorDOMException-
如果遊標是使用
IDBindex.openKeyCursor建立的,或者當前正在迭代中,或者已經迭代到末尾之後,則丟擲此錯誤。
示例
在這個簡單的程式碼片段中,我們建立一個事務,檢索一個物件儲存,然後使用遊標遍歷物件儲存中的所有記錄。如果當前遊標的 albumTitle 是“Grace under pressure”,我們就使用 const request = cursor.delete(); 刪除整個記錄。
游標不需要我們根據鍵來選擇資料;我們可以直接獲取所有資料。另請注意,在迴圈的每次迭代中,你可以使用 cursor.value.foo 從游標物件下的當前記錄中獲取資料。有關完整的可工作示例,請參閱我們的 IDBCursor 示例(線上檢視示例)。
js
function deleteResult() {
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 === "Grace under pressure") {
const request = cursor.delete();
request.onsuccess = () => {
console.log(
"Deleted that mediocre album from 1984. Even Power windows is better.",
);
};
} else {
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-delete① |
瀏覽器相容性
載入中…
另見
- 使用 IndexedDB
- 開始事務:
IDBDatabase - 使用事務:
IDBTransaction - 設定鍵的範圍:
IDBKeyRange - 檢索和修改資料:
IDBObjectStore - 使用遊標:
IDBCursor - 參考示例:待辦事項通知(檢視即時示例)。