IDBCursor: continuePrimaryKey() 方法
注意: 此功能在 Web Workers 中可用。
continuePrimaryKey()
方法是 IDBCursor
接口的方法,它将游标推进到键匹配 key 参数且主键匹配 primaryKey 参数的项。
一个典型的用例是恢复先前游标关闭处的迭代,而无需逐个比较键。
在加载新的游标数据之前,多次调用此方法(例如,从同一个 onsuccess 处理程序中两次调用 continuePrimaryKey()
)会导致在第二次调用时抛出 InvalidStateError
,因为游标的 got value 标志已被取消设置。
此方法仅对来自索引的游标有效。对来自对象存储的游标使用它将抛出错误。
语法
js
continuePrimaryKey(key, primaryKey)
参数
key
-
将游标定位到的键。
primaryKey
-
将游标定位到的主键。
返回值
无 (undefined
).
异常
此方法可能会引发以下类型的 DOMException
TransactionInactiveError
DOMException
-
如果此 IDBCursor 的事务处于非活动状态,则抛出此异常。
DataError
DOMException
-
如果 key 参数具有以下任一条件,则抛出此异常
- 键不是有效键。
- 键小于或等于此游标的位置,且游标的方向为
next
或nextunique
。 - 键大于或等于此游标的位置,且此游标的方向为
prev
或prevunique
。
InvalidStateError
DOMException
-
如果当前正在迭代游标或游标已迭代到其末尾,则抛出此异常。
InvalidAccessError
DOMException
-
如果游标的方向不是
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① |
浏览器兼容性
BCD 表格仅在启用了 JavaScript 的浏览器中加载。
另请参阅
- 使用 IndexedDB
- 启动事务:
IDBDatabase
- 使用事务:
IDBTransaction
- 设置键范围:
IDBKeyRange
- 检索和更改数据:
IDBObjectStore
- 使用游标:
IDBCursor
- 参考示例:待办事项通知 (查看示例).