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 September 2021.
Hinweis: Diese Funktion ist in Web Workers verfügbar.
Die transaction
Methode der IDBDatabase
Schnittstelle gibt sofort ein Transaktionsobjekt (IDBTransaction
) zurück. Dieses enthält die Methode IDBTransaction.objectStore
, die Sie verwenden können, um auf Ihren Objektspeicher zuzugreifen.
Syntax
transaction(storeNames)
transaction(storeNames, mode)
transaction(storeNames, mode, options)
Parameter
storeNames
-
Die Namen der Objektspeicher, die im Geltungsbereich der neuen Transaktion liegen. Diese werden als ein Array von Strings angegeben. Geben Sie nur die Objektspeicher an, auf die Sie zugreifen müssen. Wenn Sie nur auf einen Objektspeicher 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 Objektspeicher 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 wirft eine 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 Objektspeicher. Dies ist der Standardmodus.
readwrite
-
Öffnet eine Transaktion sowohl zum Lesen als auch zum Schreiben aus einem Objektspeicher. Dies sollte nur verwendet werden, wenn in die Datenbank geschrieben werden muss.
readwriteflush
Nicht standardisiert Experimentell-
Erzwingt, dass eine Transaktion vor dem Ausliefern des
complete
-Ereignisses auf die Festplatte geschrieben wird. Dies könnte zum Speichern kritischer Daten verwendet werden, die später nicht mehr neu berechnet werden können.
options
Optional-
Ein Objekt, das zusätzliche Optionen definiert, einschließlich:
durability
-
Einer der drei string-literal Werte unten:
"strict"
-
Der Benutzeragent kann der Meinung sein, dass die Transaktion nur dann erfolgreich abgeschlossen wurde, wenn alle ausstehenden Änderungen erfolgreich auf ein permanentes Speichermedium geschrieben wurden. Dies wird empfohlen, wenn das Risiko eines Datenverlusts die Leistungsauswirkungen und den Stromverbrauch überwiegt (im Vergleich zu
relaxed
). "relaxed"
-
Der Benutzeragent kann der Meinung sein, dass die Transaktion erfolgreich abgeschlossen wurde, sobald alle ausstehenden Änderungen in das Betriebssystem geschrieben wurden, ohne nachfolgende Überprüfung. Dies bietet eine bessere Leistung als
strict
und wird für kurzlebige Daten wie Cache oder sich schnell ändernde Datensätze empfohlen. "default"
-
Der Benutzeragent sollte sein Standardverhalten zur Haltbarkeit für den Speicherbereich verwenden. Dies ist der Standard für Transaktionen, wenn nicht anders angegeben.
Rückgabewert
Ein IDBTransaction
Objekt.
Ausnahmen
InvalidStateError
DOMException
-
Wird ausgelöst, wenn die Methode
close()
zuvor auf dieser Instanz vonIDBDatabase
aufgerufen wurde. NotFoundError
DOMException
-
Wird ausgelöst, wenn ein im 'storeNames'-Parameter angegebenes Objektspeicher gelöscht oder entfernt wurde.
TypeError
-
Wird ausgelöst, wenn der Wert für den
mode
Parameter ungültig ist. InvalidAccessError
DOMException
-
Wird ausgelöst, wenn die Funktion mit einer leeren Liste von Objektspeichernamen aufgerufen wurde.
Beispiele
In diesem Beispiel öffnen wir eine Datenbankverbindung und verwenden dann transaction()
, um eine Transaktion für die Datenbank zu öffnen.
Für ein vollständiges Beispiel, siehe unsere To-do Notifications 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
BCD tables only load in the browser
Siehe auch
- Verwendung von IndexedDB
- Transaktionen starten:
IDBDatabase
- Verwendung von Transaktionen:
IDBTransaction
- Festlegen eines Schlüsselbereichs:
IDBKeyRange
- Abrufen und Ändern Ihrer Daten:
IDBObjectStore
- Verwendung von Cursoren:
IDBCursor
- Referenzbeispiel: To-do Notifications (Beispiel live ansehen).