IDBObjectStore.openCursor
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2021.
IDBObjectStore
的 openCursor()
方法 返回一个IDBRequest
对象,并在一个单独的线程中,返回一个新的 IDBCursorWithValue
对象。此方法目的是用一个游标来遍历一个对象存储空间。
若要确认此操作是否成功完成,请监听结果的 success
事件。
备注: 此特性在 Web Worker 中可用。
语法
js
var request = ObjectStore.openCursor(query, direction);
参数
- query 可选
-
要查询的键或者
IDBKeyRange
。如果传一个有效的键,则会默认为只包含此键的范围。如果此参数不传值,则默认为一个选择了该对象存储空间全部记录的键范围。 - direction 可选
-
一个
IDBCursorDirection
来告诉游标要移动的方向。有效的值有"next"
、"nextunique"
、"prev"
和"prevunique"
。默认值是"next"
。
返回
一个 IDBRequest
对象,在此对象上触发与此操作相关的后续事件。
异常
此方法可能引起以下类型之一的 DOMException
:
异常 | 描述 |
---|---|
InvalidStateError |
此 IDBObjectStore 或IDBIndex 已被删除。 |
TransactionInactiveError |
此 IDBObjectStore 的事务处于非活动状态。 |
DataError |
指定的键或键范围无效。 |
例子
在下面这个简单的片段中,我们创建一个事务,检索一个对象存储空间,然后用一个游标去遍历该对象存储空间的所有记录:
js
var transaction = db.transaction("name", "readonly");
var objectStore = transaction.objectStore("name");
var request = objectStore.openCursor();
request.onsuccess = function (event) {
var cursor = event.target.result;
if (cursor) {
// cursor.value 包含正在被遍历的当前记录
// 这里你可以对 result 做些什么
cursor.continue();
} else {
// 没有更多 results
}
};
规范
Specification |
---|
Indexed Database API 3.0 # ref-for-dom-idbobjectstore-opencursor② |
浏览器兼容性
BCD tables only load in the browser
参见
- Using IndexedDB
- Starting transactions:
IDBDatabase
- Using transactions:
IDBTransaction
- Setting a range of keys:
IDBKeyRange
- Retrieving and making changes to your data:
IDBObjectStore
- Using cursors:
IDBCursor
- Reference example: To-do Notifications (view example live.)