IDBCursor: delete() 方法
注意: 此功能在 Web Workers 中可用。
delete()
方法是 IDBCursor
接口的方法,它返回一个 IDBRequest
对象,并在另一个线程中删除游标所在位置的记录,而不会改变游标的位置。删除记录后,游标的值将设置为 null。
请注意,您不能在从 IDBIndex.openKeyCursor()
获取的游标上调用 delete()
(或 IDBCursor.update()
)。对于这样的需求,您必须使用 IDBIndex.openCursor()
。
语法
js
delete()
参数
无。
返回值
一个 IDBRequest
对象,后续与该操作相关的事件将在该对象上触发。
如果操作成功,请求的 result
属性的值为 undefined
。
异常
此方法可能会引发以下类型的 DOMException
TransactionInactiveError
DOMException
-
如果此 IDBCursor 的事务处于非活动状态,则会抛出此异常。
ReadOnlyError
DOMException
-
如果事务模式为只读,则会抛出此异常。
InvalidStateError
DOMException
-
如果游标是使用
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① |
浏览器兼容性
BCD 表格仅在浏览器中加载
另请参见
- 使用 IndexedDB
- 启动事务:
IDBDatabase
- 使用事务:
IDBTransaction
- 设置键范围:
IDBKeyRange
- 检索和更改您的数据:
IDBObjectStore
- 使用游标:
IDBCursor
- 参考示例:待办事项通知 (查看示例)。