IDBRequest

Baseline 廣泛可用 *

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

* 此特性的某些部分可能存在不同級別的支援。

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

IndexedDB API 的 IDBRequest 介面透過事件處理程式屬性,提供了對資料庫和資料庫物件非同步請求結果的訪問。資料庫的每個讀寫操作都透過一個請求來完成。

請求物件最初不包含有關操作結果的任何資訊,但一旦資訊可用,就會在請求上觸發一個事件,並且可以透過 IDBRequest 例項的屬性來獲取資訊。

所有非同步操作會立即返回一個 IDBRequest 例項。每個請求都有一個 readyState,初始設定為 'pending' 狀態;當請求完成或失敗時,它會變為 'done'。當狀態設定為 done 時,每個請求都會返回一個 result 和一個 error,並在請求上觸發一個事件。當狀態仍為 pending 時,任何訪問 resulterror 的嘗試都會引發 InvalidStateError 異常。

通俗地說,所有非同步方法都會返回一個請求物件。如果請求已成功完成,結果將透過 result 屬性提供,並會在請求上觸發一個表示成功的事件(success)。如果在執行操作時發生錯誤,異常將透過 error 屬性提供,並會觸發一個錯誤事件(error)。

IDBOpenDBRequest 介面繼承自 IDBRequest

EventTarget IDBRequest

例項屬性

還繼承了 EventTarget 的屬性。

IDBRequest.error 只讀

如果請求不成功,則返回一個 DOMException,指示發生了什麼錯誤。

IDBRequest.result 只讀

返回請求的結果。如果請求未完成,則結果不可用,並會丟擲 InvalidStateError 異常。

IDBRequest.source 只讀

請求的來源,例如 IDBIndexIDBObjectStore。如果沒有來源(例如呼叫 IDBFactory.open 時),則返回 null。

IDBRequest.readyState 只讀

請求的狀態。每個請求都以 pending 狀態開始。當請求成功完成或發生錯誤時,狀態會變為 done

IDBRequest.transaction 只讀

請求的事務。對於某些請求,此屬性可能為 null,例如從 IDBFactory.open 返回的請求(除非需要升級)。(你只是在連線資料庫,所以沒有事務可以返回)。

例項方法

沒有方法,但繼承了 EventTarget 的方法。

事件

使用 addEventListener() 或透過將事件監聽器分配給此介面的 oneventname 屬性來監聽這些事件。

error

當請求因錯誤而失敗時觸發。

success

IDBRequest 成功時觸發。

示例

在以下程式碼片段中,我們非同步開啟一個數據庫併發出一個請求;包含 onerroronsuccess 函式來處理成功和錯誤情況。有關完整的可執行示例,請參閱我們的 待辦事項通知 應用(線上檢視示例)。

js
let db;

// Let us open our database
const DBOpenRequest = window.indexedDB.open("toDoList", 4);

// these two event handlers act on the database being
// opened successfully, or not
DBOpenRequest.onerror = (event) => {
  note.appendChild(document.createElement("li")).textContent =
    "Error loading database.";
};

DBOpenRequest.onsuccess = (event) => {
  note.appendChild(document.createElement("li")).textContent =
    "Database initialized.";

  // store the result of opening the database.
  db = DBOpenRequest.result;
};

規範

規範
Indexed Database API 3.0
# request-api

瀏覽器相容性

另見