IDBCursor: update() 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 update()
Methode des IDBCursor
-Interfaces gibt ein IDBRequest
-Objekt zurück und aktualisiert in einem separaten Thread den Wert an der aktuellen Position des Cursors im Objekt-Store. Wenn der Cursor auf einen Datensatz zeigt, der gerade gelöscht wurde, wird ein neuer Datensatz erstellt.
Beachten Sie, dass Sie update()
(oder
IDBCursor.delete()
) nicht auf Cursorn aufrufen können, die aus
IDBIndex.openKeyCursor()
heruntergeladen wurden. In solchen Fällen müssen Sie stattdessen IDBIndex.openCursor()
verwenden.
Syntax
update(value)
Parameter
value
-
Der neue Wert, der an der aktuellen Position gespeichert werden soll.
Rückgabewert
Ein IDBRequest
-Objekt, auf dem nachfolgende Ereignisse in Bezug auf diese Operation ausgelöst werden.
Wenn die Operation erfolgreich ist, ist der Wert der result
-Eigenschaft der Anforderung der Schlüssel für den aktualisierten Datensatz.
Ausnahmen
Diese Methode kann eine DOMException
einer der folgenden Typen auslösen:
TransactionInactiveError
DOMException
-
Wird ausgelöst, wenn die Transaktion des IDBCursors inaktiv ist.
ReadOnlyError
DOMException
-
Wird ausgelöst, wenn der Transaktionsmodus nur lesen ist.
InvalidStateError
DOMException
-
Wird ausgelöst, wenn der Cursor mit
IDBindex.openKeyCursor
erstellt wurde, gerade iteriert wird oder über sein Ende hinaus iteriert wurde. DataError
DOMException
-
Wird ausgelöst, wenn der zugrunde liegende Objekt-Store Inline-Schlüssel verwendet und die Eigenschaft im Wert am Schlüsselpfad des Objekt-Stores nicht mit dem Schlüssel in der Position dieses Cursors übereinstimmt.
DataCloneError
DOMException
-
Wird ausgelöst, wenn die Daten, die gespeichert werden sollen, nicht vom internen strukturierten Klonalgorithmus geklont werden konnten.
Beispiele
In diesem einfachen Fragment erstellen wir eine Transaktion, greifen auf einen Objekt-Store zu und verwenden dann einen Cursor, um durch alle Datensätze im Objekt-Store zu iterieren. Wenn der albumTitle
des aktuellen Cursors "A farewell to kings" ist, aktualisieren wir das Jahr, in dem das Album veröffentlicht wurde, indem wir const request = cursor.update();
verwenden.
Beachten Sie, dass Sie mit cursor.update()
keine Primärschlüssel ändern können, weshalb wir den Albumtitel nicht ändern; dies würde die Datenintegrität beeinträchtigen. In einer solchen Situation müssten Sie den Datensatz vollständig löschen und dann einen neuen mit IDBObjectStore.add
hinzufügen. Beachten Sie auch, dass Sie cursor.value
nicht direkt in einem Update-Aufruf verwenden können, daher wird im folgenden Beispiel eine Zwischenvariable updateData
verwendet.
Der Cursor erfordert nicht, dass wir die Daten basierend auf einem Schlüssel auswählen; wir können einfach alle erfassen. Beachten Sie auch, dass Sie in jeder Iteration der Schleife Daten aus dem aktuellen Datensatz unter dem Cursor-Objekt mit cursor.value.foo
abrufen können. Für ein vollständiges Arbeitsbeispiel siehe unser IDBCursor Beispiel (Beispiel live ansehen).
function updateResult() {
list.textContent = "";
const transaction = db.transaction(["rushAlbumList"], "readwrite");
const objectStore = transaction.objectStore("rushAlbumList");
objectStore.openCursor().onsuccess = (event) => {
const cursor = event.target.result;
if (cursor) {
if (cursor.value.albumTitle === "A farewell to kings") {
const updateData = cursor.value;
updateData.year = 2050;
const request = cursor.update(updateData);
request.onsuccess = () => {
console.log("A better album year?");
};
}
const listItem = document.createElement("li");
listItem.textContent = `${cursor.value.albumTitle}, ${cursor.value.year}`;
list.appendChild(listItem);
cursor.continue();
} else {
console.log("Entries displayed.");
}
};
}
Spezifikationen
Specification |
---|
Indexed Database API 3.0 # ref-for-dom-idbcursor-update① |
Browser-Kompatibilität
BCD tables only load in the browser
Siehe auch
- Using IndexedDB
- Transaktionen starten:
IDBDatabase
- Verwendung von Transaktionen:
IDBTransaction
- Einstellen eines Schlüsselspektrums:
IDBKeyRange
- Abrufen und Ändern Ihrer Daten:
IDBObjectStore
- Verwendung von Cursors:
IDBCursor
- Referenzbeispiel: Aufgabenbenachrichtigungen (Beispiel live ansehen).