Обновление объектов хранилища

Последнее обновление: 11.11.2023

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

put(item)
put(item, key)

Первый параметр - item представляет значение, которое обновляется или добавляется в базу данных. Второй и необязательный параметр key представляет ключ, по которому надо обновить/добавить объект.

Метод put() возвращает объект IDBRequest. В случае успешного обновления/добавления у объекта IDBRequest вызывается событие success, а его свойство result будет содержать объект с указанным ключом. В случае ошибки генерируется событие error вместе с исключением типа DOMException. Для обработки этих событий можно использовать соответственно свойства onsuccess и onerror

Например, пусть хранилище users в базе данных test хранит следующие объекты:

[
    { name: "Tom", age: 39, id: 1},
    { name: "Bob", age: 43, id: 2},
    { name: "Sam", age: 28, id: 3}
]

Обновим объект в хранилище "users", у которого ключ равен 1:

const request = indexedDB.open("test", 5); // подключаемся к бд test

// при создании или изменении версии базы данных создаем в ней хранилище users
request.onupgradeneeded = (event) => { 
    const db = event.target.result;  // получаем бд
    // ключом является свойство id, и оно автоматически инкрементируется
    db.createObjectStore("users", { keyPath: "id", autoIncrement: true });
};
// при открытии базы данных изменяем в хранилище users 1 объект
request.onsuccess = (event) => { 
    const db = event.target.result;  // получаем бд
    const transaction = db.transaction(["users"], "readwrite"); // создаем транзакцию
    const userStore = transaction.objectStore("users");   // получаем хранилище users
    // получаем объект c id=1
    const getRequest = userStore.get(1);   
    getRequest.onsuccess = () => {
        const user = getRequest.result;
        console.log(user);
        // меняем значения свойств
        user.name = "Tomas";
        user.age = 22;
        // обновляем значения
        const updateRequest = userStore.put(user);
        updateRequest.onsuccess = () =>  console.log("Data successfully updated"); 
    };
    getRequest.onerror = (e) =>  console.log(e.target.error.message); // выводим сообщение об ошибке
};
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850