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
-
如果此
IDBObjectStore
或IDBIndex
已被删除,则会抛出此异常。 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 表仅在浏览器中加载
另请参阅
- 使用 IndexedDB
- 启动事务:
IDBDatabase
- 使用事务:
IDBTransaction
- 设置键范围:
IDBKeyRange
- 检索和修改数据:
IDBObjectStore
- 使用游标:
IDBCursor
- 参考示例:待办事项通知 (查看示例).