Spec-Zone.ru › Web APIs

IDBObjectStore: метод put()

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

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

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

Примечание: Эта функция доступна в Веб-воркерах.

Метод put() интерфейса IDBObjectStore обновляет заданную запись в базе данных или вставляет новую запись, если данной записи еще нет.

Он возвращает объект IDBRequest и, в отдельном потоке, создает структурную копию значения и сохраняет скопированное значение в хранилище объектов. Это делается для добавления новых записей или обновления существующих записей в хранилище объектов, когда режим транзакции равен readwrite. Если запись успешно сохранена, то событие успеха срабатывает на возвращенном объекте запроса со свойством result , установленным в ключ сохраненной записи, и свойством transaction , установленным в транзакцию, в которой открыто это хранилище объектов.

Метод put — это метод обновления или вставки. Смотрите метод IDBObjectStore.add для метода только вставки.

Обратите внимание, что если у вас есть IDBCursor к записи, которую вы хотите обновить, ее обновление с помощью IDBCursor.update() предпочтительнее, чем использование IDBObjectStore.put(). Это делает очевидным, что существующая запись будет обновлена, а не будет вставлена ​​новая запись.

Синтаксис

put(item)
put(item, key)

Параметры

item

Элемент, который вы хотите обновить (или вставить).

key Необязательно

Первичный ключ записи, которую вы хотите обновить (например, из IDBCursor.primaryKey).

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

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

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

Исключения

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

ReadOnlyError DOMException

Вызывается, если транзакция, связанная с этой операцией, находится в режиме только для чтения режима.

TransactionInactiveError DOMException

Вызывается, если транзакция этого IDBObjectStore неактивна.

DataError DOMException

Вызывается, если выполняются какие-либо из следующих условий:

  • Хранилище объектов использует встроенные ключи или имеет генератор ключей, и был указан параметр key.
  • Хранилище объектов использует внестрочные ключи и не имеет генератора ключей, и параметр key не был указан.
  • Хранилище объектов использует встроенные ключи, но не имеет генератор ключей, и путь ключа хранилища объектов не приводит к получению допустимого ключа.
  • Параметр key был указан, но не содержит допустимого ключа.
InvalidStateError DOMException

Вызывается, если хранилище IDBObjectStore было удалено или удалено.

DataCloneError DOMException

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

Примеры

В следующем примере запрашивается заданный заголовок записи; когда этот запрос успешен, функция onsuccess получает связанную запись из IDBObjectStore (доступной как objectStoreTitleRequest.result), обновляет одно свойство записи, а затем помещает обновленную запись обратно в хранилище объектов в другом запросе с put(). Для полного примера см. наше приложение To-do Notifications (посмотреть пример вживую).

const title = "Walk dog";

// Open up a transaction as usual
const objectStore = db
  .transaction(["toDoList"], "readwrite")
  .objectStore("toDoList");

// Get the to-do list object that has this title as its title
const objectStoreTitleRequest = objectStore.get(title);

objectStoreTitleRequest.onsuccess = () => {
  // Grab the data object returned as the result
  const data = objectStoreTitleRequest.result;

  // Update the notified value in the object to "yes"
  data.notified = "yes";

  // Create another request that inserts the item back into the database
  const updateTitleRequest = objectStore.put(data);

  // Log the transaction that originated this request
  console.log(
    `The transaction that originated this request is ${updateTitleRequest.transaction}`,
  );

  // When this new request succeeds, run the displayData() function again to update the display
  updateTitleRequest.onsuccess = () => {
    displayData();
  };
};

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

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

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

Рабочий стол Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на IOS Samsung Internet WebView Android
put 23 12 10 15 8 25 22 14 8 1.5 4.4

См. также

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

© 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/IDBObjectStore/put

Spec-Zone.ru

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