IDBDatabase: transaction()-Methode
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Hinweis: Diese Funktion ist in Web Workers verfügbar.
Die transaction
-Methode der IDBDatabase
-Schnittstelle gibt sofort ein Transaktionsobjekt (IDBTransaction
) zurück, das die Methode IDBTransaction.objectStore
enthält, mit der Sie auf Ihren Objekt-Store zugreifen können.
Syntax
transaction(storeNames)
transaction(storeNames, mode)
transaction(storeNames, mode, options)
Parameter
storeNames
-
Die Namen der Objekt-Stores, die im Geltungsbereich der neuen Transaktion sind, deklariert als ein Array von Strings. Geben Sie nur die Objekt-Stores an, auf die Sie zugreifen müssen. Wenn Sie nur auf einen Objekt-Store zugreifen müssen, können Sie dessen Namen als String angeben. Daher sind die folgenden Zeilen gleichwertig:
jsdb.transaction(["my-store-name"]); db.transaction("my-store-name");
Wenn Sie auf alle Objekt-Stores in der Datenbank zugreifen müssen, können Sie die Eigenschaft
IDBDatabase.objectStoreNames
verwenden:jsconst transaction = db.transaction(db.objectStoreNames);
Das Übergeben eines leeren Arrays führt zu einer Ausnahme.
mode
Optional-
Die Arten des Zugriffs, die in der Transaktion durchgeführt werden können. Transaktionen werden in einem von drei Modi geöffnet:
readonly
-
Öffnet eine Transaktion zum Lesen aus einem Objekt-Store. Dies ist der Standardmodus.
readwrite
-
Öffnet eine Transaktion zum sowohl Lesen als auch Schreiben aus einem Objekt-Store. Dies sollte nur verwendet werden, wenn Sie in die Datenbank schreiben müssen.
readwriteflush
Nicht standardisiert Experimentell-
Erzwingt, dass eine Transaktion vor der Auslieferung des
complete
-Events auf die Festplatte geschrieben wird. Dies könnte zum Speichern kritischer Daten verwendet werden, die später nicht neu berechnet werden können.
options
Optional-
Objekt, das zusätzliche Optionen definiert, einschließlich:
durability
-
Einer der drei unten aufgeführten String-Literalwerte:
"strict"
-
Der User-Agent kann die Transaktion erst dann als erfolgreich abgeschlossen betrachten, nachdem überprüft wurde, dass alle ausstehenden Änderungen erfolgreich auf ein permanentes Speichermedium geschrieben wurden. Dies wird empfohlen, wenn das Risiko eines Datenverlustes stärker wiegt als die Auswirkungen auf Leistung und Stromverbrauch (verglichen mit
relaxed
). "relaxed"
-
Der User-Agent kann die Transaktion als erfolgreich abgeschlossen betrachten, sobald alle ausstehenden Änderungen auf das Betriebssystem geschrieben wurden, ohne nachfolgende Verifizierung. Dies bietet bessere Leistung als
strict
und wird für flüchtige Daten wie Caches oder schnell wechselnde Datensätze empfohlen. "default"
-
Der User-Agent sollte sein Standardverhalten zur Haltbarkeit für den Speicher-Bucket verwenden. Dies ist die Voreinstellung für Transaktionen, wenn nicht anders angegeben.
Rückgabewert
Ein IDBTransaction
-Objekt.
Ausnahmen
InvalidStateError
DOMException
-
Ausgelöst, wenn die Methode
close()
zuvor auf dieserIDBDatabase
-Instanz aufgerufen wurde. NotFoundError
DOMException
-
Ausgelöst, wenn ein im 'storeNames'-Parameter angegebenes Objekt-Store gelöscht oder entfernt wurde.
TypeError
-
Ausgelöst, wenn der Wert für den
mode
-Parameter ungültig ist. InvalidAccessError
DOMException
-
Ausgelöst, wenn die Funktion mit einer leeren Liste von Store-Namen aufgerufen wurde.
Beispiele
In diesem Beispiel öffnen wir eine Datenbankverbindung und verwenden dann transaction(), um eine Transaktion in der Datenbank zu öffnen. Für ein vollständiges Beispiel siehe unsere To-do-Benachrichtigungen-App (Beispiel live ansehen).
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.
Spezifikationen
Specification |
---|
Indexed Database API 3.0 # ref-for-dom-idbdatabase-transaction③ |
Browser-Kompatibilität
Siehe auch
- Verwendung von IndexedDB
- Transaktionen beginnen:
IDBDatabase
- Verwendung von Transaktionen:
IDBTransaction
- Festlegen eines Schlüsselbereichs:
IDBKeyRange
- Abrufen und Ändern Ihrer Daten:
IDBObjectStore
- Verwendung von Cursoren:
IDBCursor
- Referenzbeispiel: To-do-Benachrichtigungen (Beispiel live ansehen).