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 - 参考示例:待办事项通知(查看实时示例)。