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 参数具有以下任一条件,则抛出此异常

  • 键不是有效键。
  • 键小于或等于此游标的位置,且游标的方向为 nextnextunique
  • 键大于或等于此游标的位置,且此游标的方向为 prevprevunique
InvalidStateError DOMException

如果当前正在迭代游标或游标已迭代到其末尾,则抛出此异常。

InvalidAccessError DOMException

如果游标的方向不是 prevnext,则抛出此异常。

示例

以下是如何恢复对所有标记为 "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 的浏览器中加载。

另请参阅