IDBRequest

注意:此功能在 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 属性来监听这些事件。

错误

当错误导致请求失败时触发。

成功

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

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

另请参阅