IDBDatabase:transaction() 方法

注意:此功能在Web Workers 中可用。

transaction 方法是 IDBDatabase 接口的方法,它立即返回一个事务对象 (IDBTransaction),其中包含 IDBTransaction.objectStore 方法,您可以使用此方法访问您的对象存储。

语法

js
transaction(storeNames)
transaction(storeNames, mode)
transaction(storeNames, mode, options)

参数

storeNames

新事务范围内的对象存储名称,声明为字符串数组。仅指定您需要访问的对象存储。如果您只需要访问一个对象存储,则可以将其名称指定为字符串。因此,以下行是等效的

js
db.transaction(["my-store-name"]);
db.transaction("my-store-name");

如果您需要访问数据库中的所有对象存储,可以使用属性 IDBDatabase.objectStoreNames

js
const transaction = db.transaction(db.objectStoreNames);

传递空数组将引发异常。

mode 可选

可以在事务中执行的访问类型。事务以三种模式之一打开

readonly

打开一个用于读取对象存储的事务。这是默认模式。

readwrite

打开一个用于读取和写入对象存储的事务。仅当需要写入数据库时才应使用此模式。

readwriteflush 非标准 实验性

强制事务在传递 complete 事件之前刷新到磁盘。这可能用于存储以后无法重新计算的关键数据。

options 可选

定义附加选项的对象,包括

durability

以下三个字符串文字值之一

"strict"

用户代理可能只在验证所有未完成的更改都已成功写入持久性存储介质后才认为事务已成功提交。在数据丢失的风险大于其对性能和功耗的影响(与 relaxed 相比)的情况下,建议使用此模式。

"relaxed"

用户代理可能在所有未完成的更改都已写入操作系统后立即认为事务已成功提交,而无需后续验证。这比 strict 提供了更好的性能,建议用于短暂数据,例如缓存或快速更改的记录。

"default"

用户代理应为存储桶使用其默认的持久性行为。如果未另行指定,这是事务的默认值。

返回值

一个 IDBTransaction 对象。

异常

InvalidStateError DOMException

如果在此 IDBDatabase 实例上先前已调用 close() 方法,则会引发此异常。

NotFoundError DOMException

如果“storeNames”参数中指定的对象存储已被删除或移除,则会引发此异常。

TypeError

如果 mode 参数的值无效,则会引发此异常。

InvalidAccessError DOMException

如果使用空存储名称列表调用此函数,则会引发此异常。

示例

在此示例中,我们打开数据库连接,然后使用 transaction() 在数据库上打开事务。有关完整示例,请参阅我们的 待办事项通知 应用程序 (查看示例)。

js
let db;

// Let us open our database
const DBOpenRequest = window.indexedDB.open("toDoList", 4);

DBOpenRequest.onsuccess = (event) => {
  note.appendChild(document.createElement("li")).textContent =
    "Database initialized.";

  // store the result of opening the database in the db variable.
  // This is used a lot below
  db = DBOpenRequest.result;

  // Run the displayData() function to populate the task list with
  // all the to-do list data already in the IDB
  displayData();
};

// open a read/write db transaction, ready for adding the data
const transaction = db.transaction(["toDoList"], "readwrite");

// report on the success of opening the transaction
transaction.oncomplete = (event) => {
  note.appendChild(document.createElement("li")).textContent =
    "Transaction completed: database modification finished.";
};

transaction.onerror = (event) => {
  note.appendChild(document.createElement("li")).textContent =
    "Transaction not opened due to error. Duplicate items not allowed.";
};

// you would then go on to do something to this database
// via an object store
const objectStore = transaction.objectStore("toDoList");
// etc.

规范

规范
Indexed Database API 3.0
# ref-for-dom-idbdatabase-transaction③

浏览器兼容性

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

另请参阅