[ 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.

Das IDBTransaction-Interface der IndexedDB API bietet eine statische, asynchrone Transaktion auf einer Datenbank mittels Ereignisbehandler-Attributen. Alle Lese- und Schreibvorgnge von Daten erfolgen 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 zu stellen. Sie knnen auch ein IDBTransaction-Objekt verwenden, um Transaktionen abzubrechen.

EventTarget IDBTransaction

Transaktionen werden gestartet, wenn die Transaktion erstellt wird, nicht wenn die erste Anfrage gestellt wird; ziehen Sie zum Beispiel folgendes in Betracht:

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");

Nachdem der Code ausgefhrt wurde, sollte der Objekt-Store den Wert "2" enthalten, da trans2 nach trans1 ausgefhrt werden sollte.

Eine Transaktion wechselt zwischen aktiven und inaktiven Zustnden zwischen Aufgaben in der Ereignisschleife. Sie ist aktiv in der Aufgabe, in der sie erstellt wurde, und in jeder Aufgabe der success- oder error-Ereignisbehandler der Anfragen. In allen anderen Aufgaben ist sie inaktiv, in diesem Fall schlgt das Platzieren von Anfragen fehl. Wenn keine neuen Anfragen gestellt werden, wenn die Transaktion aktiv ist, und keine anderen ausstehenden Anfragen vorliegen, wird die Transaktion automatisch abgeschlossen.

In diesem Artikel

Transaktionsfehler

Transaktionen knnen aus einer festen Anzahl von Grnden fehlschlagen, von denen alle (auer dem Absturz des Benutzer-Agents) einen Abbruch-Callback auslsen:

  • Abbruch aufgrund fehlerhafter Anfragen, z.B. der Versuch, denselben Schlssel zweimal mit add() hinzuzufgen, oder put() mit demselben Indexschlssel mit einer Eindeutigkeitsbeschrnkung. Dies fhrt zu einem Fehler bei der Anfrage, der sich zu einem Fehler bei der Transaktion ausweiten kann, was die Transaktion abbricht. Dies kann durch Verwendung von preventDefault() beim Fehlerereignis auf der Anfrage verhindert werden.
  • Ein expliziter abort()-Aufruf aus dem Skript.
  • Eine unbehandelte Ausnahme im success/error-Handler der Anfrage.
  • Ein E/A-Fehler (z.B. ein tatschliches Scheitern beim Schreiben auf die Festplatte, oder ein anderes Betriebssystem/Hardware-Versagen).
  • berschrittenes Kontingent.
  • Ein Absturz des Benutzer-Agents.

Haltbarkeitsgarantien in Firefox

Beachten Sie, dass ab Firefox 40 IndexedDB-Transaktionen entspannte Haltbarkeitsgarantien haben, um die Leistung zu verbessern (siehe Firefox Bug 1112702). Frher wurde in einer readwrite-Transaktion ein complete-Ereignis nur ausgelst, wenn alle Daten garantiert auf die Festplatte geschrieben worden waren. In Firefox 40+ wird das complete-Ereignis ausgelst, nachdem dem Betriebssystem mitgeteilt wurde, die Daten zu schreiben, jedoch mglicherweise bevor diese Daten tatschlich auf die Festplatte geschrieben wurden. Das complete-Ereignis kann also schneller als zuvor geliefert werden, jedoch besteht eine geringe Chance, dass die gesamte Transaktion verloren geht, wenn das Betriebssystem abstrzt oder es zu einem Stromausfall kommt, bevor die Daten auf die Festplatte geschrieben werden. Da solche katastrophalen Ereignisse selten sind, sollten sich die meisten Benutzer nicht weiter darum kmmern mssen.

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

Instanz-Eigenschaften

IDBTransaction.db Schreibgeschtzt

Die Datenbankverbindung, mit der diese Transaktion verknpft ist.

IDBTransaction.durability Schreibgeschtzt

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

IDBTransaction.error Schreibgeschtzt

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

IDBTransaction.mode Schreibgeschtzt

Der Modus zur Isolierung des Zugriffs auf Daten in den Objekt-Stores, die im Geltungsbereich der Transaktion liegen. Der Standardwert ist readonly.

IDBTransaction.objectStoreNames Schreibgeschtzt

Gibt eine DOMStringList der Namen von IDBObjectStore-Objekten zurck, die mit der Transaktion verknpft sind.

Instanzmethoden

Erbt von: EventTarget

IDBTransaction.abort()

Macht alle nderungen an Objekten in der mit dieser Transaktion verbundenen Datenbank rckgngig. Wenn diese Transaktion bereits abgebrochen oder abgeschlossen wurde, lst diese Methode ein Fehlerereignis aus.

IDBTransaction.objectStore()

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

IDBTransaction.commit()

Bei einer aktiven Transaktion die Transaktion abschlieen. Beachten Sie, dass dies normalerweise nicht aufgerufen werden muss eine Transaktion wird automatisch abgeschlossen, wenn alle ausstehenden Anfragen erfllt wurden und keine neuen Anfragen gestellt wurden. commit() kann verwendet werden, um den Abschlussprozess zu starten, ohne auf Ereignisse von ausstehenden Anfragen warten zu mssen.

Ereignisse

Hren Sie auf diese Ereignisse mit addEventListener() oder indem Sie einen Ereignisbehandler der oneventname-Eigenschaft dieses Interfaces zuweisen.

abort

Ein Ereignis, das ausgelst wird, wenn die IndexedDB-Transaktion abgebrochen wird. Ebenfalls verfgbar ber die onabort-Eigenschaft; dieses Ereignis wandert zu IDBDatabase.

complete

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

error

Ein Ereignis, das ausgelst wird, wenn eine Anfrage einen Fehler zurckgibt und das Ereignis bis zum Verbindungsobjekt (IDBDatabase) hochwandert. Ebenfalls verfgbar ber die onerror-Eigenschaft.

Moduskonstanten

Veraltet: Diese Funktion wird nicht mehr empfohlen. Obwohl einige Browser sie mglicherweise noch untersttzen, knnte sie bereits aus den relevanten Webstandards entfernt worden sein, in Krze entfernt werden oder nur noch aus Kompatibilittsgrnden bestehen. Vermeiden Sie die Verwendung und aktualisieren Sie vorhandenen Code, falls mglich; siehe die Kompatibilittstabelle am Ende dieser Seite, um Ihre Entscheidung zu untersttzen. Beachten Sie, dass diese Funktion jederzeit aufhren knnte zu funktionieren.

Warnung: Diese Konstanten sind nicht mehr verfgbar sie wurden in Gecko 25 entfernt. Sie sollten stattdessen die Zeichenfolgenkonstanten 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, aber nicht das ndern.

READ_WRITE "readwrite" (1 in Chrome) Erlaubt das Lesen und Schreiben von Daten in vorhandenen Datenspeichern, um gendert zu werden.
VERSION_CHANGE "versionchange" (2 in Chrome) Erlaubt jede Operation, einschlielich solcher, die Objekt-Store und Indizes lschen und erstellen. Transaktionen in diesem Modus knnen nicht gleichzeitig mit anderen Transaktionen ausgefhrt werden. Transaktionen in diesem Modus sind als "Upgrade-Transaktionen" bekannt.

Auch wenn diese Konstanten jetzt veraltet sind, knnen Sie sie immer noch verwenden, um bei Bedarf Rckwrtskompatibilitt bereitzustellen. Sie sollten defensiv programmieren fr den Fall, dass das Objekt nicht mehr verfgbar ist:

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

Beispiele

Im folgenden Codebeispiel ffnen wir eine Lese-/Schreibtransaktion auf unserer Datenbank und fgen einem Objekt-Store Daten hinzu. Beachten Sie auch die Funktionen, die an Transaktionsereignisbehandler angehngt sind, um ber das Ergebnis der Transaktionserffnung im Falle von Erfolg oder Misserfolg zu berichten. Fr ein vollstndiges funktionierendes Beispiel siehe unsere To-do Notifications-App (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