IDBRequest
Baseline 廣泛可用 *
注意:此功能在 Web Workers 中可用。
IndexedDB API 的 IDBRequest 介面透過事件處理程式屬性,提供了對資料庫和資料庫物件非同步請求結果的訪問。資料庫的每個讀寫操作都透過一個請求來完成。
請求物件最初不包含有關操作結果的任何資訊,但一旦資訊可用,就會在請求上觸發一個事件,並且可以透過 IDBRequest 例項的屬性來獲取資訊。
所有非同步操作會立即返回一個 IDBRequest 例項。每個請求都有一個 readyState,初始設定為 'pending' 狀態;當請求完成或失敗時,它會變為 'done'。當狀態設定為 done 時,每個請求都會返回一個 result 和一個 error,並在請求上觸發一個事件。當狀態仍為 pending 時,任何訪問 result 或 error 的嘗試都會引發 InvalidStateError 異常。
通俗地說,所有非同步方法都會返回一個請求物件。如果請求已成功完成,結果將透過 result 屬性提供,並會在請求上觸發一個表示成功的事件(success)。如果在執行操作時發生錯誤,異常將透過 error 屬性提供,並會觸發一個錯誤事件(error)。
IDBOpenDBRequest 介面繼承自 IDBRequest。
例項屬性
還繼承了 EventTarget 的屬性。
IDBRequest.error只讀-
如果請求不成功,則返回一個
DOMException,指示發生了什麼錯誤。 IDBRequest.result只讀-
返回請求的結果。如果請求未完成,則結果不可用,並會丟擲
InvalidStateError異常。 IDBRequest.source只讀-
請求的來源,例如
IDBIndex或IDBObjectStore。如果沒有來源(例如呼叫IDBFactory.open時),則返回 null。 IDBRequest.readyState只讀-
請求的狀態。每個請求都以
pending狀態開始。當請求成功完成或發生錯誤時,狀態會變為done。 IDBRequest.transaction只讀-
請求的事務。對於某些請求,此屬性可能為 null,例如從
IDBFactory.open返回的請求(除非需要升級)。(你只是在連線資料庫,所以沒有事務可以返回)。
例項方法
沒有方法,但繼承了 EventTarget 的方法。
事件
使用 addEventListener() 或透過將事件監聽器分配給此介面的 oneventname 屬性來監聽這些事件。
示例
在以下程式碼片段中,我們非同步開啟一個數據庫併發出一個請求;包含 onerror 和 onsuccess 函式來處理成功和錯誤情況。有關完整的可執行示例,請參閱我們的 待辦事項通知 應用(線上檢視示例)。
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 |
瀏覽器相容性
載入中…
另見
- 使用 IndexedDB
- 開始事務:
IDBDatabase - 使用事務:
IDBTransaction - 設定鍵的範圍:
IDBKeyRange - 檢索和修改資料:
IDBObjectStore - 使用遊標:
IDBCursor - 參考示例:待辦事項通知(檢視即時示例)。