IDBCursor: update() 方法

注意:此功能在 Web Workers 中可用。

update() 方法是 IDBCursor 接口的方法,它返回一个 IDBRequest 对象,并在另一个线程中更新对象存储中游标当前位置的值。如果游标指向一个刚刚被删除的记录,则会创建一个新记录。

请注意,你不能对通过 IDBIndex.openKeyCursor() 获取的游标调用 update()(或 IDBCursor.delete())。对于这种需求,你必须使用 IDBIndex.openCursor() 代替。

语法

js
update(value)

参数

value

要存储在当前位置的新值。

返回值

一个 IDBRequest 对象,后续与该操作相关的事件将在该对象上触发。

如果操作成功,则请求的 result 属性的值是更新记录的键。

异常

此方法可能会引发以下类型之一的 DOMException

TransactionInactiveError DOMException

如果此 IDBCursor 的事务处于非活动状态,则会引发此异常。

ReadOnlyError DOMException

如果事务模式为只读,则会引发此异常。

InvalidStateError DOMException

如果游标是使用 IDBindex.openKeyCursor 创建的,当前正在迭代,或已迭代到末尾,则会引发此异常。

DataError DOMException

如果底层对象存储使用内联键,并且对象存储键路径上的值中的属性与此游标位置的键不匹配,则会引发此异常。

DataCloneError DOMException

如果要存储的数据无法通过内部结构化克隆算法克隆,则会引发此异常。

示例

在这个简单的代码片段中,我们创建了一个事务,获取了一个对象存储,然后使用一个游标迭代对象存储中的所有记录。如果当前游标的 albumTitle 为“A farewell to kings”,我们使用 const request = cursor.update(); 更新专辑发行的年份。

请注意,你无法使用 cursor.update() 更改主键,因此我们没有更改专辑标题;这会破坏数据的完整性。在这种情况下,你必须完全删除该记录,然后使用 IDBObjectStore.add 添加一个新记录。还要注意,你不能直接将 cursor.value 放入更新调用中,因此以下示例使用了一个中间变量 updateData

游标不需要我们根据键选择数据;我们只需获取所有数据。还要注意,在循环的每次迭代中,你可以使用 cursor.value.foo 从游标对象下的当前记录中获取数据。有关完整的代码示例,请参阅我们的 IDBCursor 示例 (查看示例)。

js
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①

浏览器兼容性

BCD 表格仅在启用了 JavaScript 的浏览器中加载。

另请参阅