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 Juli 2015.
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:
TransactionInactiveErrorDOMException-
Wird ausgelöst, wenn die Transaktion des IDBCursors inaktiv ist.
ReadOnlyErrorDOMException-
Wird ausgelöst, wenn der Transaktionsmodus nur lesen ist.
InvalidStateErrorDOMException-
Wird ausgelöst, wenn der Cursor mit
IDBindex.openKeyCursorerstellt wurde, gerade iteriert wird oder über sein Ende hinaus iteriert wurde. DataErrorDOMException-
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.
DataCloneErrorDOMException-
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
Loading…
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).