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

浏览器兼容性

另见