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

js
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).

js
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