IDBRequest: Eigenschaft transaction
Hinweis: Diese Funktion ist in Web Workers verfügbar.
Die transaction
schreibgeschützte Eigenschaft des IDBRequest-Interfaces gibt die Transaktion für die Anfrage zurück, also die Transaktion, in der die Anfrage gestellt wird.
Diese Eigenschaft kann null
sein für Anfragen, die nicht innerhalb von Transaktionen gestellt werden, wie beispielsweise für Anfragen, die von IDBFactory.open
zurückgegeben werden – in diesem Fall verbinden Sie sich lediglich mit einer Datenbank, sodass keine Transaktion zurückgegeben werden kann. Wenn beim Öffnen einer Datenbank ein Versions-Upgrade erforderlich ist, dann ist während des upgradeneeded
Ereignishandlers die transaction
Eigenschaft ein IDBTransaction
mit mode
gleich "versionchange"
und kann verwendet werden, um auf bestehende Objektläden und Indizes zuzugreifen oder das Upgrade abzubrechen. Nach dem Upgrade wird die transaction
Eigenschaft wieder null
sein.
Wert
Ein IDBTransaction
.
Beispiele
Im folgenden Beispiel wird ein bestimmter Datensatz angefordert, onsuccess
erhält den zugehörigen Datensatz aus dem IDBObjectStore
(verfügbar als objectStoreTitleRequest.result
), aktualisiert eine Eigenschaft des Datensatzes und legt dann den aktualisierten Datensatz in einer weiteren Anfrage zurück in den Objektladen. Die Quelle der Anfragen wird in der Entwicklerkonsole protokolliert – beide stammen aus der gleichen Transaktion. Für ein vollständiges funktionierendes Beispiel siehe unsere To-do Notifications App (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 transaction
Eigenschaft während eines Versions-Upgrades verwendet werden kann, um auf bestehende Objektläden 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
Specification |
---|
Indexed Database API 3.0 # ref-for-dom-idbrequest-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).