IDBRequest - 提供数据库对象异步请求结果的访问
IDBRequest
是 IndexedDB API 的接口,提供了使用事件处理程序属性处理的,数据库和数据库对象异步请求结果的访问。数据库上的每个读写操作都是使用请求完成的。
请求对象最初不包含有关操作结果的任何信息,但一旦信息可用,就会对请求触发事件,并通过 IDBRequest
实例的属性提供信息。
所有异步操作都会立即返回 IDBRequest
实例。每个请求都有一个 readyState
,它被设置为 'pending'
状态;当请求完成或失败时,它会变为 'done'
。当状态设置为 done
时,每个请求都返回一个 result
和一个 error
,并在请求中触发一个事件。当状态仍为 pending
时,尝试访问 result
或 error
都会引发 InvalidStateError
异常。
简而言之,所有异步方法都返回一个请求对象。如果请求已成功完成,则通过 result
属性获得结果,并在请求中触发指示成功的事件(IDBRequest.onsuccess
)。如果在执行操作时发生错误,则通过 result
属性获取异常,并触发错误事件(IDBRequest.onerror
)。
接口 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
属性分配事件监听器来监听这些事件:
error
当错误导致请求失败时触发。
也可以通过 onerror
属性处理。
success
当 IDBRequest
成功时被触发。
也可以通过 onsuccess
属性处理。
实例
在下面的代码片段中,我们异步打开数据库并发出请求;通过 onerror
和 onsuccess
函数来处理成功和错误情况。有关完整的工作实例,请参阅我们的待办事项通知应用程序(查看在线实例。)
var db;
// 让我们打开数据库
var DBOpenRequest = window.indexedDB.open("toDoList", 4);
// 这两个事件处理程序用于当数据库成功/失败打开时,对数据库进行操作
DBOpenRequest.onerror = function(event) {
note.innerHTML += '<li>加载数据库出错。</li>';
};
DBOpenRequest.onsuccess = function(event) {
note.innerHTML += '<li>数据库已初始化。</li>';
// 存储在 db 变量中打开数据库的结果。
db = DBOpenRequest.result;
};
规范
规范 | 状态 | 备注 |
---|---|---|
Indexed Database API IDBRequest 的定义 |
推荐 | 初始定义。 |
Indexed Database API 2.0 IDBRequest 的定义 |
编者的草案 | - |
桌面浏览器兼容性
特性 | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
基础支持 | 24 23 — 57 webkit | 支持 | 16 10 — 16 moz | 101 | 15 | 7 |
Available in workers | 支持 | 未知 | 37 | 未知 | 支持 | 未知 |
error | 24 23 — 57 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
onerror | 24 23 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
onsuccess | 24 23 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
readyState | 24 23 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
result | 24 23 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
source | 24 23 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
transaction | 24 23 webkit | 12 | 16 10 — 16 moz | 101 | 15 | 7 |
移动浏览器兼容性
特性 | Android | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS Safari |
---|---|---|---|---|---|---|---|
基础支持 | 24 23 — 57 webkit | 24 23 — 57 webkit | 支持 | 22 | 未知 | 22 | 8 |
Available in workers | 支持 | 支持 | 支持 | 37 | 未知 | 支持 | 未知 |
error | 24 23 — 57 webkit | 24 23 — 57 webkit | 支持 | 22 | 未知 | 22 | 8 |
onerror | 支持 | 支持 | 支持 | 22 | 未知 | 22 | 8 |
onsuccess | 支持 | 支持 | 支持 | 22 | 未知 | 22 | 8 |
readyState | 支持 | 支持 | 支持 | 22 | 未知 | 22 | 8 |
result | 支持 | 支持 | 支持 | 22 | 未知 | 22 | 8 |
source | 支持 | 支持 | 支持 | 22 | 未知 | 22 | 8 |
transaction | 支持 | 支持 | 支持 | 22 | 未知 | 22 | 8 |
1. 部分的
相关链接
- 使用 IndexedDB
- 启动事务:
IDBDatabase
- 使用事务:
IDBTransaction
- 设置一系列键:
IDBKeyRange
- 检索并更改数据:
IDBObjectStore
- 使用游标:
IDBCursor
- 参考实例:To-do 通知 (在线查看实例。)