IDBRequest
注意:此功能在 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
的方法。
事件
示例
在下面的代码片段中,我们异步打开一个数据库并发出一个请求;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 |
浏览器兼容性
BCD 表格仅在启用 JavaScript 的浏览器中加载。
另请参阅
- 使用 IndexedDB
- 启动事务:
IDBDatabase
- 使用事务:
IDBTransaction
- 设置键范围:
IDBKeyRange
- 检索和更改您的数据:
IDBObjectStore
- 使用游标:
IDBCursor
- 参考示例:待办事项通知(查看示例直播)。