IDBCursor: continuePrimaryKey() 方法
注意:此功能在 Web Workers 中可用。
continuePrimaryKey() 方法属于 IDBCursor 接口,用于将光标移动到键匹配 key 参数且主键匹配 primaryKey 参数的对象。
一个典型的用例是,在之前关闭的光标处恢复迭代,而无需逐个比较键。
在加载新的光标数据之前多次调用此方法(例如,在同一个 onsuccess 处理程序中调用两次 continuePrimaryKey())将在第二次调用时抛出 InvalidStateError,因为光标的 got value 标志已被取消设置。
此方法仅对来自索引的光标有效。将其用于来自对象存储的光标会引发错误。
语法
js
continuePrimaryKey(key, primaryKey)
参数
key-
用于定位光标的键。
primaryKey-
用于定位光标的主键。
返回值
无(undefined)。
异常
此方法可能会抛出以下类型之一的DOMException:
TransactionInactiveErrorDOMException-
如果此
IDBCursor的事务处于非活动状态,则抛出此异常。 DataErrorDOMException-
如果
key参数满足以下任一条件,则抛出此异常:- 键不是有效键。
- 键小于或等于光标当前位置,并且光标的方向为
next或nextunique。 - 键大于或等于光标当前位置,并且光标的方向为
prev或prevunique。
InvalidStateErrorDOMException-
如果光标当前正在迭代或已迭代到末尾,则抛出此异常。
InvalidAccessErrorDOMException-
如果光标的方向不是
prev或next,则抛出此异常。
示例
以下是如何在上次访问后恢复标签为 "javascript" 的所有文章的迭代:
js
let request = articleStore.index("tag").openCursor();
let count = 0;
let unreadList = [];
request.onsuccess = (event) => {
let cursor = event.target.result;
if (!cursor) {
return;
}
let lastPrimaryKey = getLastIteratedArticleId();
if (lastPrimaryKey > cursor.primaryKey) {
cursor.continuePrimaryKey("javascript", lastPrimaryKey);
return;
}
// update lastIteratedArticleId
setLastIteratedArticleId(cursor.primaryKey);
// preload 5 articles into the unread list;
unreadList.push(cursor.value);
if (++count < 5) {
cursor.continue();
}
};
规范
| 规范 |
|---|
| Indexed Database API 3.0 # ref-for-dom-idbcursor-continueprimarykey① |
浏览器兼容性
加载中…
另见
- 使用 IndexedDB
- 开始事务:
IDBDatabase - 使用事务:
IDBTransaction - 设置键的范围:
IDBKeyRange - 检索和修改数据:
IDBObjectStore - 使用游标:
IDBCursor - 参考示例:待办事项通知(查看实时示例)。