IDBObjectStore: openCursor() 方法

Baseline 已廣泛支援

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 ⁨2015 年 7 月⁩以來,各瀏覽器均已提供此特性。

注意:此功能在 Web Workers 中可用。

openCursor() 方法是 IDBObjectStore 介面的一部分,它返回一個 IDBRequest 物件,並在單獨的執行緒中返回一個新的 IDBCursorWithValue 物件。用於透過遊標遍歷物件儲存。

語法

js
openCursor()
openCursor(query)
openCursor(query, direction)

引數

query 可選

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

direction 可選

一個字串,用於告知遊標的移動方向。預設值為 next。有效值為:

next

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

nextunique

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

prev

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

prevunique

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

返回值

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

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

  • 一個指向第一個匹配給定查詢的記錄的 IDBCursorWithValue 物件
  • 如果未找到匹配的記錄,則為 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.openCursor();
request.onsuccess = (event) => {
  const cursor = event.target.result;
  if (cursor) {
    // cursor.value contains the current record being iterated through
    // 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-opencursor②

瀏覽器相容性

另見