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 表格仅在浏览器中加载

另请参见