IDBObjectStore: openKeyCursor() 方法

Baseline 已廣泛支援

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

IDBObjectStore 介面的 openKeyCursor() 方法返回一個 IDBRequest 物件,其結果將被設定為一個 IDBCursor,可用於遍歷匹配的結果。用於使用遊標遍歷物件儲存的鍵。

要確定新增操作是否已成功完成,請監聽結果的 success 事件。

語法

js
openKeyCursor()
openKeyCursor(query)
openKeyCursor(query, direction)

引數

query 可選

要查詢的鍵範圍。如果傳入單個有效鍵,則預設為僅包含該鍵的範圍。如果未傳入任何內容,則預設為選擇此物件儲存中所有記錄的鍵範圍。

direction 可選

一個字串,告訴遊標的遍歷方向。預設為 next。有效值為:

next

遊標在儲存區的開頭開啟;然後,遊標按鍵的遞增順序返回所有記錄,包括重複項。

nextunique

遊標在儲存區的開頭開啟;然後,遊標按鍵的遞增順序返回所有不重複的記錄。

prev

遊標在儲存區的末尾開啟;然後,遊標按鍵的遞減順序返回所有記錄,包括重複項。

prevunique

遊標在儲存區的末尾開啟;然後,遊標按鍵的遞減順序返回所有不重複的記錄。

返回值

一個 IDBRequest 物件,後續與此操作相關的事件會在此物件上觸發。

如果操作成功,請求的 result 屬性的值是

  • 一個 IDBCursor 物件,指向第一個匹配給定查詢的記錄
  • 如果未找到匹配的記錄,則為 null

異常

此方法可能會丟擲以下型別之一的DOMException

InvalidStateError DOMException

如果此 IDBObjectStoreIDBIndex 已被刪除,則會引發此錯誤。

TransactionInactiveError DOMException

如果此 IDBObjectStore 的事務不活躍,則會丟擲此異常。

DataError DOMException

如果指定的鍵或鍵範圍無效,則丟擲此異常。

示例

在這個簡單的片段中,我們建立了一個事務,檢索了一個物件儲存,然後使用遊標來遍歷物件儲存中的所有記錄。

js
const transaction = db.transaction("name", "readonly");
const objectStore = transaction.objectStore("name");
const request = objectStore.openKeyCursor();
request.onsuccess = (event) => {
  const cursor = event.target.result;
  if (cursor) {
    // cursor.key contains the key of the current record being iterated through
    // note that there is no cursor.value, unlike for openCursor
    // this is where you'd do something with the result
    cursor.continue();
  } else {
    // no more results
  }
};

規範

規範
Indexed Database API 3.0
# ref-for-dom-idbobjectstore-openkeycursor①

瀏覽器相容性

另見