IDBObjectStore: openKeyCursor() 方法
IDBObjectStore 接口的 openKeyCursor() 方法返回一个 IDBRequest 对象,其结果将被设置为一个 IDBCursor,可用于遍历匹配的结果。用于使用游标遍历对象存储的键。
要确定添加操作是否已成功完成,请监听结果的 success 事件。
语法
js
openKeyCursor()
openKeyCursor(query)
openKeyCursor(query, direction)
参数
query可选-
要查询的键范围。如果传入单个有效键,则默认为仅包含该键的范围。如果未传入任何内容,则默认为选择此对象存储中所有记录的键范围。
direction可选-
一个字符串,告诉游标的遍历方向。默认为
next。有效值为:next-
游标在存储区的开头打开;然后,游标按键的递增顺序返回所有记录,包括重复项。
nextunique-
游标在存储区的开头打开;然后,游标按键的递增顺序返回所有不重复的记录。
prev-
游标在存储区的末尾打开;然后,游标按键的递减顺序返回所有记录,包括重复项。
prevunique-
游标在存储区的末尾打开;然后,游标按键的递减顺序返回所有不重复的记录。
返回值
一个 IDBRequest 对象,后续与此操作相关的事件会在此对象上触发。
如果操作成功,请求的 result 属性的值是
- 一个
IDBCursor对象,指向第一个匹配给定查询的记录 - 如果未找到匹配的记录,则为
null。
异常
此方法可能会抛出以下类型之一的DOMException:
InvalidStateErrorDOMException-
如果此
IDBObjectStore或IDBIndex已被删除,则会引发此错误。 TransactionInactiveErrorDOMException-
如果此
IDBObjectStore的事务不活跃,则会抛出此异常。 DataErrorDOMException-
如果指定的键或键范围无效,则抛出此异常。
示例
在这个简单的片段中,我们创建了一个事务,检索了一个对象存储,然后使用游标来遍历对象存储中的所有记录。
js
const transaction = db.transaction("name", "readonly");
const objectStore = transaction.objectStore("name");
const request = objectStore.openKeyCursor();
request.onsuccess = (event) => {
const cursor = event.target.result;
if (cursor) {
// cursor.key contains the key of the current record being iterated through
// note that there is no cursor.value, unlike for openCursor
// 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-openkeycursor① |
浏览器兼容性
加载中…
另见
- 使用 IndexedDB
- 开始事务:
IDBDatabase - 使用事务:
IDBTransaction - 设置键的范围:
IDBKeyRange - 检索和修改数据:
IDBObjectStore - 使用游标:
IDBCursor - 参考示例:待办事项通知(查看实时示例)。