IDBCursor: метод update()
Базовая Широко доступная
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузера. Она доступна во всех браузерах с сентября 2021 года.
Примечание: Эта функция доступна в Web Workers.
Метод update() интерфейса IDBCursor возвращает объект IDBRequest, и в отдельном потоке обновляет значение в текущей позиции курсора в хранилище объектов. Если курсор указывает на запись, которая только что была удалена, создается новая запись.
Обратите внимание, что вы не можете вызвать update() (или IDBCursor.delete()) на курсорах, полученных из IDBIndex.openKeyCursor(). Для таких задач необходимо использовать IDBIndex.openCursor().
Синтаксис
update(value)
Параметры
value-
Новое значение, которое нужно сохранить в текущей позиции.
Возвращаемое значение
Объект IDBRequest, на котором впоследствии будут вызваны события, связанные с данной операцией.
Если операция выполнена успешно, свойство result запроса содержит ключ обновленной записи.
Исключения
Этот метод может вызывать исключение DOMException одного из следующих типов:
-
TransactionInactiveErrorDOMException -
Выбрасывается, если транзакция IDBCursor неактивна.
-
ReadOnlyErrorDOMException -
Выбрасывается, если режим транзакции — только чтение.
-
InvalidStateErrorDOMException -
Выбрасывается, если курсор был создан с помощью
IDBindex.openKeyCursor, в настоящее время итерируется или уже пройден до конца. -
DataErrorDOMException -
Выбрасывается, если хранилище объектов использует встроенные ключи, и свойство в значении в ключевом пути хранилища объектов не соответствует ключу в текущей позиции курсора.
-
DataCloneErrorDOMException -
Выбрасывается, если данные, которые нужно сохранить, не могут быть скопированы внутренним алгоритмом структурирования.
Примеры
В этом простом фрагменте мы создаем транзакцию, получаем хранилище объектов, затем используем курсор для итерации по всем записям в хранилище объектов. Если значение 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.");
}
};
}
Спецификации
Совместимость с браузерами
| Десктоп | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| 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