IDBCursor: continuePrimaryKey() 方法

Baseline 已廣泛支援

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 ⁨2020 年 1 月⁩ 起,所有主流瀏覽器均已支援。

注意:此功能在 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①

瀏覽器相容性

另見