IDBRequest: Eigenschaft transaction

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2021.

Hinweis: Diese Funktion ist in Web Workers verfügbar.

Die transaction schreibgeschützte Eigenschaft des IDBRequest-Interfaces gibt die Transaktion für die Anfrage zurück, also die Transaktion, in der die Anfrage gestellt wird.

Diese Eigenschaft kann null sein für Anfragen, die nicht innerhalb von Transaktionen gestellt werden, wie beispielsweise für Anfragen, die von IDBFactory.open zurückgegeben werden – in diesem Fall verbinden Sie sich lediglich mit einer Datenbank, sodass keine Transaktion zurückgegeben werden kann. Wenn beim Öffnen einer Datenbank ein Versions-Upgrade erforderlich ist, dann ist während des upgradeneeded Ereignishandlers die transaction Eigenschaft ein IDBTransaction mit mode gleich "versionchange" und kann verwendet werden, um auf bestehende Objektläden und Indizes zuzugreifen oder das Upgrade abzubrechen. Nach dem Upgrade wird die transaction Eigenschaft wieder null sein.

Wert

Beispiele

Im folgenden Beispiel wird ein bestimmter Datensatz angefordert, onsuccess erhält den zugehörigen Datensatz aus dem IDBObjectStore (verfügbar als objectStoreTitleRequest.result), aktualisiert eine Eigenschaft des Datensatzes und legt dann den aktualisierten Datensatz in einer weiteren Anfrage zurück in den Objektladen. Die Quelle der Anfragen wird in der Entwicklerkonsole protokolliert – beide stammen aus der gleichen Transaktion. Für ein vollständiges funktionierendes Beispiel siehe unsere To-do Notifications App (Beispiel live ansehen).

js
const title = "Walk dog";

// Open up a transaction as usual
const objectStore = db
  .transaction(["toDoList"], "readwrite")
  .objectStore("toDoList");

// Get the to-do list object that has this title as its title
const objectStoreTitleRequest = objectStore.get(title);

objectStoreTitleRequest.onsuccess = () => {
  // Grab the data object returned as the result
  const data = objectStoreTitleRequest.result;

  // Update the notified value in the object to "yes"
  data.notified = "yes";

  // Create another request that inserts the item back
  // into the database
  const updateTitleRequest = objectStore.put(data);

  // Log the transaction that originated this request
  console.log(
    `The transaction that originated this request is ${updateTitleRequest.transaction}`,
  );

  // When this new request succeeds, run the displayData()
  // function again to update the display
  updateTitleRequest.onsuccess = () => {
    displayData();
  };
};

Dieses Beispiel zeigt, wie die transaction Eigenschaft während eines Versions-Upgrades verwendet werden kann, um auf bestehende Objektläden zuzugreifen:

js
const openRequest = indexedDB.open("db", 2);
console.log(openRequest.transaction); // Will log "null".

openRequest.onupgradeneeded = (event) => {
  console.log(openRequest.transaction.mode); // Will log "versionchange".
  const db = openRequest.result;
  if (event.oldVersion < 1) {
    // New database, create "books" object store.
    db.createObjectStore("books");
  }
  if (event.oldVersion < 2) {
    // Upgrading from v1 database: add index on "title" to "books" store.
    const bookStore = openRequest.transaction.objectStore("books");
    bookStore.createIndex("by_title", "title");
  }
};

openRequest.onsuccess = () => {
  console.log(openRequest.transaction); // Will log "null".
};

Spezifikationen

Specification
Indexed Database API 3.0
# ref-for-dom-idbrequest-transaction①

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch