[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/de/docs/Web/API/IDBTransaction [Back]  [Original]

IDBTransaction - Web-APIs | MDN

Dieser Inhalt wurde automatisch aus dem Englischen bersetzt, und kann Fehler enthalten. Erfahre mehr ber dieses Experiment.

View in English Always switch to English

IDBTransaction

Baseline
Weitgehend verfgbar
*

Diese Funktion ist gut etabliert und funktioniert auf vielen Gerten und in vielen Browserversionen. Sie ist seit Juli 2015 browserbergreifend verfgbar.

* Einige Teile dieser Funktion werden mglicherweise unterschiedlich gut untersttzt.

Hinweis: Diese Funktion ist in Web Workers verfgbar.

Die Schnittstelle IDBTransaction der IndexedDB API stellt eine statische, asynchrone Transaktion fr eine Datenbank unter Verwendung von Event-Handler-Attributen bereit. Smtliches Lesen und Schreiben von Daten erfolgt innerhalb von Transaktionen. Sie verwenden IDBDatabase, um Transaktionen zu starten, IDBTransaction, um den Modus der Transaktion festzulegen (z. B. ob sie readonly oder readwrite ist), und greifen auf einen IDBObjectStore zu, um eine Anfrage auszufhren. Sie knnen ein IDBTransaction-Objekt auch verwenden, um Transaktionen abzubrechen.

EventTarget IDBTransaction

Transaktionen werden gestartet, wenn die Transaktion erstellt wird, nicht wenn die erste Anfrage gestellt wird; betrachten Sie beispielsweise Folgendes:

js
const trans1 = db.transaction("foo", "readwrite");
const trans2 = db.transaction("foo", "readwrite");
const objectStore2 = trans2.objectStore("foo");
const objectStore1 = trans1.objectStore("foo");
objectStore2.put("2", "key");
objectStore1.put("1", "key");

Nach Ausfhrung des Codes sollte der Object Store den Wert 2 enthalten, da trans2 nach trans1 ausgefhrt werden sollte.

Eine Transaktion wechselt zwischen den Zustnden aktiv und inaktiv zwischen Event-Loop-Tasks. Sie ist in dem Task aktiv, in dem sie erstellt wurde, sowie in jedem Task der success- oder error-Event-Handler der Anfragen. In allen anderen Tasks ist sie inaktiv; in diesem Fall schlagen Anfragen fehl. Wenn keine neuen Anfragen gestellt werden, whrend die Transaktion aktiv ist, und keine weiteren ausstehenden Anfragen vorhanden sind, wird die Transaktion automatisch festgeschrieben.

In diesem Artikel

Transaktionsfehler

Transaktionen knnen aus einer festgelegten Anzahl von Grnden fehlschlagen; alle davon (auer einem Absturz des User Agents) lsen einen Abort-Callback aus:

  • Abbruch aufgrund fehlerhafter Anfragen, z. B. beim Versuch, denselben Schlssel zweimal mit add() hinzuzufgen, oder bei put() mit demselben Indexschlssel bei einer Eindeutigkeitsbeschrnkung. Dies verursacht einen Fehler bei der Anfrage, der zu einem Fehler bei der Transaktion weitergereicht werden kann, wodurch die Transaktion abgebrochen wird. Dies kann verhindert werden, indem preventDefault() fr das Fehlerereignis der Anfrage verwendet wird.
  • Ein expliziter abort()-Aufruf durch ein Skript.
  • Eine nicht abgefangene Ausnahme im success/error-Handler der Anfrage.
  • Ein E/A-Fehler (z. B. ein tatschlicher Fehler beim Schreiben auf die Festplatte oder ein anderer Betriebssystem-/Hardwarefehler).
  • berschrittenes Kontingent.
  • Ein Absturz des User Agents.

Firefox-Dauerhaftigkeitsgarantien

Beachten Sie, dass IndexedDB-Transaktionen seit Firefox 40 gelockerte Dauerhaftigkeitsgarantien haben, um die Leistung zu erhhen (siehe Firefox-Bug 1112702.) Zuvor wurde bei einer readwrite-Transaktion ein complete-Ereignis erst ausgelst, wenn garantiert war, dass alle Daten auf die Festplatte geschrieben wurden. In Firefox 40+ wird das complete-Ereignis ausgelst, nachdem das Betriebssystem angewiesen wurde, die Daten zu schreiben, jedoch mglicherweise bevor diese Daten tatschlich auf die Festplatte geschrieben wurden. Das complete-Ereignis kann daher schneller als zuvor ausgeliefert werden; allerdings besteht eine geringe Wahrscheinlichkeit, dass die gesamte Transaktion verloren geht, wenn das Betriebssystem abstrzt oder die Stromversorgung ausfllt, bevor die Daten auf die Festplatte geschrieben wurden. Da solche katastrophalen Ereignisse selten sind, mssen sich die meisten Nutzenden nicht weiter darum kmmern.

Wenn Sie aus irgendeinem Grund Dauerhaftigkeit sicherstellen mssen (z. B. weil Sie kritische Daten speichern, die spter nicht neu berechnet werden knnen), knnen Sie eine Transaktion dazu zwingen, vor der Auslieferung des complete-Ereignisses auf die Festplatte zu schreiben, indem Sie eine Transaktion mit dem experimentellen (nicht standardmigen) Modus readwriteflush erstellen (siehe IDBDatabase.transaction.

Instanzeigenschaften

IDBTransaction.db Schreibgeschtzt

Die Datenbankverbindung, der diese Transaktion zugeordnet ist.

IDBTransaction.durability Schreibgeschtzt

Gibt den Dauerhaftigkeitshinweis zurck, mit dem die Transaktion erstellt wurde.

IDBTransaction.error Schreibgeschtzt

Gibt eine DOMException zurck, die den Fehlertyp angibt, der bei einer nicht erfolgreichen Transaktion aufgetreten ist. Diese Eigenschaft ist null, wenn die Transaktion nicht abgeschlossen ist, abgeschlossen und erfolgreich festgeschrieben wurde oder mit der Funktion IDBTransaction.abort() abgebrochen wurde.

IDBTransaction.mode Schreibgeschtzt

Der Modus zur Isolierung des Zugriffs auf Daten in den Object Stores, die zum Geltungsbereich der Transaktion gehren. Der Standardwert ist readonly.

IDBTransaction.objectStoreNames Schreibgeschtzt

Gibt eine DOMStringList mit den Namen der IDBObjectStore-Objekte zurck, die der Transaktion zugeordnet sind.

Instanzmethoden

Geerbt von: EventTarget

IDBTransaction.abort()

Macht alle nderungen an Objekten in der Datenbank rckgngig, die dieser Transaktion zugeordnet sind. Wenn diese Transaktion abgebrochen wurde oder abgeschlossen ist, lst diese Methode ein Fehlerereignis aus.

IDBTransaction.objectStore()

Gibt ein IDBObjectStore-Objekt zurck, das einen Object Store darstellt, der Teil des Geltungsbereichs dieser Transaktion ist.

IDBTransaction.commit()

Schreibt bei einer aktiven Transaktion die Transaktion fest. Beachten Sie, dass dies normalerweise nicht aufgerufen werden muss eine Transaktion wird automatisch festgeschrieben, wenn alle ausstehenden Anfragen erfllt wurden und keine neuen Anfragen gestellt wurden. commit() kann verwendet werden, um den Festschreibungsprozess zu starten, ohne darauf zu warten, dass Ereignisse ausstehender Anfragen ausgeliefert werden.

Ereignisse

berwachen Sie diese Ereignisse mit addEventListener() oder indem Sie der Eigenschaft oneventname dieser Schnittstelle einen Event Listener zuweisen.

abort

Ein Ereignis, das ausgelst wird, wenn die IndexedDB-Transaktion abgebrochen wird. Auch ber die Eigenschaft onabort verfgbar; dieses Ereignis wird an IDBDatabase weitergereicht.

complete

Ein Ereignis, das ausgelst wird, wenn die Transaktion erfolgreich abgeschlossen wird. Auch ber die Eigenschaft oncomplete verfgbar.

error

Ein Ereignis, das ausgelst wird, wenn eine Anfrage einen Fehler zurckgibt und das Ereignis an das Verbindungsobjekt (IDBDatabase) weitergereicht wird. Auch ber die Eigenschaft onerror verfgbar.

Moduskonstanten

Warnung: Diese Konstanten sind nicht mehr verfgbar sie wurden in Gecko 25 entfernt. Sie sollten stattdessen die Zeichenkettenkonstanten direkt verwenden. (Firefox-Bug 888598)

Transaktionen knnen einen von drei Modi haben:

Konstante Wert Beschreibung
READ_ONLY "readonly" (0 in Chrome)

Erlaubt das Lesen von Daten, jedoch nicht deren nderung.

READ_WRITE "readwrite" (1 in Chrome) Erlaubt das Lesen und Schreiben von Daten in vorhandenen Datenspeichern.
VERSION_CHANGE "versionchange" (2 in Chrome) Erlaubt die Ausfhrung beliebiger Operationen, einschlielich solcher, die Object Stores und Indizes lschen und erstellen. Transaktionen dieses Modus knnen nicht gleichzeitig mit anderen Transaktionen ausgefhrt werden. Transaktionen in diesem Modus werden als Upgrade-Transaktionen bezeichnet.

Auch wenn diese Konstanten jetzt veraltet sind, knnen Sie sie bei Bedarf weiterhin verwenden, um Abwrtskompatibilitt bereitzustellen. Sie sollten defensiv programmieren, falls das Objekt nicht mehr verfgbar ist:

js
const myIDBTransaction = window.IDBTransaction ||
  window.webkitIDBTransaction || { READ_WRITE: "readwrite" };

Beispiele

Im folgenden Codeausschnitt ffnen wir eine Lese-/Schreibtransaktion fr unsere Datenbank und fgen einem Object Store einige Daten hinzu. Beachten Sie auch die Funktionen, die an die Event-Handler der Transaktion angehngt sind, um bei Erfolg oder Fehlschlag ber das Ergebnis des ffnens der Transaktion zu berichten. Ein vollstndiges funktionierendes Beispiel finden Sie in unserer App To-do Notifications (Beispiel live ansehen).

js
const note = document.getElementById("notifications");

// an instance of a db object for us to store the IDB data in
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;

  // Add the data to the database
  addData();
};

function addData() {
  // Create a new object to insert into the IDB
  const newItem = [
    {
      taskTitle: "Walk dog",
      hours: 19,
      minutes: 30,
      day: 24,
      month: "December",
      year: 2013,
      notified: "no",
    },
  ];

  // open a read/write db transaction, ready to add 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.";
  };

  // create an object store on the transaction
  const objectStore = transaction.objectStore("toDoList");

  // add our newItem object to the object store
  const objectStoreRequest = objectStore.add(newItem[0]);

  objectStoreRequest.onsuccess = (event) => {
    // report the success of the request (this does not mean the item
    // has been stored successfully in the DB - for that you need transaction.oncomplete)
    note.appendChild(document.createElement("li")).textContent =
      "Request successful.";
  };
}

Spezifikationen

Spezifikation
Indexed Database API 3.0
# transaction

Browser-Kompatibilitt

Siehe auch


Web Proxy Viewer  |  New URL  |  Original Page