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 одного из следующих типов:
-
ReadOnlyErrorDOMException -
Вызывается, если транзакция, связанная с этой операцией, находится в режиме только для чтения режима.
-
TransactionInactiveErrorDOMException -
Вызывается, если транзакция этого
IDBObjectStoreнеактивна. -
DataErrorDOMException -
Вызывается, если выполняются какие-либо из следующих условий:
- Хранилище объектов использует встроенные ключи или имеет генератор ключей, и был указан параметр
key. - Хранилище объектов использует внестрочные ключи и не имеет генератора ключей, и параметр
keyне был указан. - Хранилище объектов использует встроенные ключи, но не имеет генератор ключей, и путь ключа хранилища объектов не приводит к получению допустимого ключа.
- Параметр
keyбыл указан, но не содержит допустимого ключа.
- Хранилище объектов использует встроенные ключи или имеет генератор ключей, и был указан параметр
-
InvalidStateErrorDOMException -
Вызывается, если хранилище
IDBObjectStoreбыло удалено или удалено. -
DataCloneErrorDOMException -
Вызывается, если данные, которые должны быть сохранены, не могут быть скопированы внутренним алгоритмом структурного клонирования.
Примеры
В следующем примере запрашивается заданный заголовок записи; когда этот запрос успешен, функция 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();
};
};
Спецификации
Совместимость браузеров
| Рабочий стол | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| 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