Spec-Zone.ru › Web APIs

IDBCursor: метод update()

Базовая Широко доступная

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузера. Она доступна во всех браузерах с сентября 2021 года.

  • Узнать больше
  • Полная совместимость
  • Отправить отзыв

Примечание: Эта функция доступна в Web Workers.

Метод update() интерфейса IDBCursor возвращает объект IDBRequest, и в отдельном потоке обновляет значение в текущей позиции курсора в хранилище объектов. Если курсор указывает на запись, которая только что была удалена, создается новая запись.

Обратите внимание, что вы не можете вызвать update() (или IDBCursor.delete()) на курсорах, полученных из IDBIndex.openKeyCursor(). Для таких задач необходимо использовать IDBIndex.openCursor().

Синтаксис

update(value)

Параметры

value

Новое значение, которое нужно сохранить в текущей позиции.

Возвращаемое значение

Объект IDBRequest, на котором впоследствии будут вызваны события, связанные с данной операцией.

Если операция выполнена успешно, свойство result запроса содержит ключ обновленной записи.

Исключения

Этот метод может вызывать исключение DOMException одного из следующих типов:

TransactionInactiveError DOMException

Выбрасывается, если транзакция IDBCursor неактивна.

ReadOnlyError DOMException

Выбрасывается, если режим транзакции — только чтение.

InvalidStateError DOMException

Выбрасывается, если курсор был создан с помощью IDBindex.openKeyCursor, в настоящее время итерируется или уже пройден до конца.

DataError DOMException

Выбрасывается, если хранилище объектов использует встроенные ключи, и свойство в значении в ключевом пути хранилища объектов не соответствует ключу в текущей позиции курсора.

DataCloneError DOMException

Выбрасывается, если данные, которые нужно сохранить, не могут быть скопированы внутренним алгоритмом структурирования.

Примеры

В этом простом фрагменте мы создаем транзакцию, получаем хранилище объектов, затем используем курсор для итерации по всем записям в хранилище объектов. Если значение albumTitle текущего курсора равно "A farewell to kings", мы обновляем год выпуска альбома с помощью const request = cursor.update();.

Обратите внимание, что вы не можете изменять первичные ключи с помощью cursor.update(), поэтому мы не меняем название альбома; это нарушит целостность данных. В такой ситуации вам нужно будет удалить запись и добавить новую с помощью IDBObjectStore.add. Обратите также внимание, что вы не можете напрямую передать cursor.value в вызов update, поэтому в примере ниже используется промежуточная переменная updateData.

Курсору не нужно выбирать данные по ключу; мы можем просто получить их все. Также обратите внимание, что на каждой итерации цикла вы можете получить данные из текущей записи в объекте курсора, используя cursor.value.foo. Для полного работающего примера см. наш пример IDBCursor (Просмотреть пример онлайн).

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.");
    }
  };
}

Спецификации

Спецификация
Indexed Database API 3.0
# ref-for-dom-idbcursor-update①

Совместимость с браузерами

Десктоп Мобильные
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на IOS Samsung Internet WebView Android
update 23 12 10 15 8 25 22 14 8 1.5 4.4

См. также

  • Использование IndexedDB
  • Инициализация транзакций: IDBDatabase
  • Использование транзакций: IDBTransaction
  • Установка диапазона ключей: IDBKeyRange
  • Получение и внесение изменений в данные: IDBObjectStore
  • Использование курсоров: IDBCursor
  • Пример: Уведомления о задачах (Просмотреть пример онлайн).

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/IDBCursor/update

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API