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 - 参考示例:待办事项通知(查看实时示例)。