Signatur
Beschreibung
Die schreibgeschützte Eigenschaft db einer IDBTransaction verweist auf die IDBDatabase-Verbindung, über die die Transaktion mit IDBDatabase.transaction() gestartet wurde. Während eines upgradeneeded-Ereignisses verweist sie auf die Verbindung, deren Versions-Upgrade gerade läuft.
Nützlich ist die Eigenschaft, wenn eine Funktion nur die Transaktion übergeben bekommt, aber trotzdem Informationen zur Datenbank braucht, etwa name, version oder objectStoreNames. Häufig kommt sie auch in Event-Handlern wie complete, error oder abort vor, wo man über event.target.db an die Verbindung kommt.
Der Wert ist immer genau dieselbe Objektreferenz, die auch transaction() aufgerufen hat. Es wird also keine neue Verbindung geöffnet. Die Eigenschaft liefert auch dann noch das Objekt, wenn die Transaktion schon beendet ist.
Rückgabewert
IDBDatabase), zu der die Transaktion gehört.Beispiele
Datenbankinfos aus einer Transaktion auslesen
const request = indexedDB.open('shop', 1);
request.onupgradeneeded = (event) => {
event.target.result.createObjectStore('produkte', { keyPath: 'id' });
};
request.onsuccess = (event) => {
const db = event.target.result;
const tx = db.transaction('produkte', 'readonly');
console.log(tx.db === db);
console.log(tx.db.name, tx.db.version);
};
Hilfsfunktion, die nur die Transaktion kennt
const logTransaction = (tx) => {
const { name, version, objectStoreNames } = tx.db;
console.log(`DB "${name}" v${version}, Stores: ${[...objectStoreNames].join(', ')}`);
console.log(`Modus: ${tx.mode}`);
};
const request = indexedDB.open('shop', 1);
request.onupgradeneeded = (e) => {
e.target.result.createObjectStore('produkte', { keyPath: 'id' });
};
request.onsuccess = (e) => {
const tx = e.target.result.transaction('produkte', 'readwrite');
logTransaction(tx);
tx.objectStore('produkte').put({ id: 1, titel: 'Tasse' });
};
Verbindung im complete-Handler schließen
const request = indexedDB.open('shop', 1);
request.onupgradeneeded = (e) => {
e.target.result.createObjectStore('produkte', { keyPath: 'id' });
};
request.onsuccess = (e) => {
const tx = e.target.result.transaction('produkte', 'readwrite');
tx.objectStore('produkte').put({ id: 2, titel: 'Teller' });
tx.oncomplete = (event) => {
const db = event.target.db; // Verbindung über die Transaktion
console.log(`Gespeichert in ${db.name}, Verbindung wird geschlossen`);
db.close();
};
tx.onerror = (event) => console.error('Fehler:', event.target.error);
};
// Wichtig · Fallstricke
- Die Eigenschaft ist schreibgeschützt. Wer ihr etwas zuweist, bewirkt nichts; im Strict Mode wird ein
TypeErrorgeworfen, weil es keinen Setter gibt. tx.dböffnet keine neue Verbindung. Ruft mantx.db.close()auf, wird die gemeinsam genutzte Verbindung geschlossen. Danach werfen weiteretransaction()-Aufrufe einenInvalidStateError.- In einem
error-Handler, der an der Transaktion hängt, kannevent.targetauch der auslösendeIDBRequestsein, weil das Ereignis nach oben weitergereicht wird (Bubbling). In dem Fall nimmt man besserevent.currentTarget.db. - Seit Jahren in allen modernen Browsern verfügbar, auch in Web Workern. Im privaten Modus mancher Browser kann IndexedDB eingeschränkt sein.