IDBRequest: transaction-Eigenschaft
Baseline
Weitgehend verfügbar
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Juli 2015 browserübergreifend verfügbar.
Hinweis: Diese Funktion ist in Web Workers verfügbar.
Die schreibgeschützte Eigenschaft transaction der Schnittstelle IDBRequest gibt die Transaktion zurück, innerhalb der die Anfrage gestellt wird.
Bei Anfragen, die nicht innerhalb einer Transaktion gestellt werden, kann diese Eigenschaft null sein. Das gilt beispielsweise für Anfragen, die von IDBFactory.open zurückgegeben werden: In diesem Fall wird lediglich eine Verbindung zu einer Datenbank hergestellt, sodass keine Transaktion zurückgegeben werden kann. Wenn beim Öffnen einer Datenbank ein Versionsupgrade erforderlich ist, enthält die Eigenschaft transaction während des Event-Handlers für upgradeneeded eine IDBTransaction, deren mode den Wert "versionchange" hat. Sie kann verwendet werden, um auf vorhandene Object Stores und Indizes zuzugreifen oder das Upgrade abzubrechen. Nach dem Upgrade ist die Eigenschaft transaction wieder null.
Wert
Eine IDBTransaction.
Beispiele
Im folgenden Beispiel wird ein Datensatz mit einem bestimmten Titel angefordert. onsuccess ruft den zugehörigen Datensatz aus dem IDBObjectStore ab (verfügbar als objectStoreTitleRequest.result), aktualisiert eine Eigenschaft des Datensatzes und schreibt den aktualisierten Datensatz anschließend mit einer weiteren Anfrage zurück in den Object Store. Die Quelle der Anfragen wird in der Entwicklerkonsole protokolliert – beide stammen aus derselben Transaktion. Ein vollständiges, funktionsfähiges Beispiel finden Sie in unserer App To-do Notifications (Beispiel live ansehen).
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 Eigenschaft transaction während eines Versionsupgrades verwendet werden kann, um auf vorhandene Object Stores zuzugreifen:
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
| Spezifikation |
|---|
| Indexed Database API 3.0> # ref-for-dom-idbrequest-transaction①> |
Browser-Kompatibilität
Siehe auch
- IndexedDB verwenden
- Transaktionen starten:
IDBDatabase - Transaktionen verwenden:
IDBTransaction - Einen Schlüsselbereich festlegen:
IDBKeyRange - Daten abrufen und ändern:
IDBObjectStore - Cursor verwenden:
IDBCursor - Referenzbeispiel: To-do Notifications (Beispiel live ansehen).