Dr_Elvis
@Dr_Elvis
В гугле забанен

Можно ли получить стутус изменения данных в indexedDB?

Есть функция которая в данный момент закидывает данные в indexedDB
function dbput(table, data){
    let openRequest = indexedDB.open('mydb', 1);
    openRequest.onsuccess = function() {
        let db = openRequest.result;
        let transaction = db.transaction(table, 'readwrite');
        let objectStore = transaction.objectStore(table);
        let result = objectStore.put(data);
        db.close();
    };
}

Есть ли способ узнать была ли запись добавлена или изменена существующая? Кроме способа перед put делать запрос на наличие данных. Грубо говоря мне нужно анализировать result и в зависимости от этого запускать другую функцию.
  • Вопрос задан
  • 84 просмотра
Решения вопроса 1
@Khamzabek
Да, есть способ: метод put возвращает объект IDBRequest, у которого есть событие onsuccess. Если запись была добавлена, то onsuccess вызовется без ошибок. Если запись была изменена, то событие onsuccess вызовется с объектом IDBKeyRange.

Пример:
function dbput(table, data){
    let openRequest = indexedDB.open('mydb', 1);
    openRequest.onsuccess = function() {
        let db = openRequest.result;
        let transaction = db.transaction(table, 'readwrite');
        let objectStore = transaction.objectStore(table);
        let request = objectStore.put(data);
        request.onsuccess = function(event) {
            if(event.target.result instanceof IDBKeyRange) {
                console.log('Record updated')
            } else {
                console.log('Record added')
            }
        };
        db.close();
    };
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы