IDBObjectStore: openCursor() 方法

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

openCursor() 方法是 IDBObjectStore 接口的方法,它返回一个 IDBRequest 对象,并在单独的线程中返回一个新的 IDBCursorWithValue 对象。用于使用游标迭代对象存储。

要确定添加操作是否成功完成,请监听结果的 success 事件。

语法

js
openCursor()
openCursor(query)
openCursor(query, direction)

参数

query 可选

要查询的键或 IDBKeyRange。如果传递单个有效键,则默认情况下将使用包含该键的范围。如果未传递任何内容,则默认情况下将使用选择此对象存储中的所有记录的键范围。

direction 可选

一个字符串,告诉游标以哪个方向移动。默认值为 next。有效值为

next

游标在存储的开头打开;然后,游标按键的升序返回所有记录,包括重复项。

nextunique

游标在存储的开头打开;然后,游标按键的升序返回所有不重复的记录。

prev

游标在存储的结尾打开;然后,游标按键的降序返回所有记录,包括重复项。

prevunique

游标在存储的结尾打开;然后,游标按键的降序返回所有不重复的记录。

返回值

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

如果操作成功,则请求的 result 属性的值为

  • 一个 IDBCursorWithValue 对象,指向与给定查询匹配的第一条记录
  • null,如果未找到匹配的记录。

异常

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

InvalidStateError DOMException

如果此 IDBObjectStoreIDBIndex 已被删除,则会抛出此异常。

TransactionInactiveError DOMException

如果此 IDBObjectStore 的事务处于非活动状态,则会抛出此异常。

DataError DOMException

如果指定的键或键范围无效,则会抛出此异常。

示例

在此简单片段中,我们创建一个事务,检索一个对象存储,然后使用游标迭代对象存储中的所有记录

js
const transaction = db.transaction("name", "readonly");
const objectStore = transaction.objectStore("name");
const request = objectStore.openCursor();
request.onsuccess = (event) => {
  const cursor = event.target.result;
  if (cursor) {
    // cursor.value contains the current record being iterated through
    // this is where you'd do something with the result
    cursor.continue();
  } else {
    // no more results
  }
};

规范

规范
Indexed Database API 3.0
# ref-for-dom-idbobjectstore-opencursor②

浏览器兼容性

BCD 表仅在浏览器中加载

另请参阅