IndexedDB: выполнение функции с добавлением метода несколько раз - без новой записи в БД - PullRequest
0 голосов
/ 18 марта 2019

Я создал функцию для хранения данных в индексированной базе данных:

    var request = window.indexedDB.open("mynewDB", 1);

    request.onupgradeneeded = function(event) {
        var db = event.target.result;
        var objectStore = db.createObjectStore("toDoList", {keyPath: 'key', autoIncrement: true});  
        var txn = event.target.transaction;
        var addRequest = txn.objectStore("toDoList").add({value: storagedata});   
      }

(К вашему сведению: данные в памяти заполнены строкой base64)

Если я выполняю эту функцию с помощью кнопкисодержимое переменных Storagedata находится в IndexedDB.Но если я хочу нажать кнопку еще раз, чтобы сохранить другое значение в IndexedDB, ничего не произойдет.

В дополнение к этому, если я выполняю функцию во второй раз, функция переходит на строку request.onupgradeneeded = function(event) { втайм-аут файла "intervalTrigger-dbg.js" для кода clearTimeout(this._delayedCallId);

Что я сделал для решения проблемы: отладка в браузере и чтение большого количества документации о indexeddb.

1 Ответ

1 голос
/ 21 марта 2019

Я решил проблему самостоятельно. Для всех, кто хочет знать, как это работает:

     var request = window.indexedDB.open("yourDB-1", 1);
     var db;
     var transaction;
     var store;

    request.onupgradeneeded = function(event) {
       var db = event.target.result;
       var transaction = event.target.transaction;
       var store = db.createObjectStore("yourDB", {keyPath: 'key', autoIncrement: true});
       }

    request.onerror = function (event) {
      console.log("Here is a error: " + event.target.errorCode);
    }

    request.onsuccess = function (event) {
      db = request.result;
      transaction = db.transaction("yourDB", "readwrite");
      store = transaction.objectStore("yourDB");

      db.onerror = function(event){
        console.log("ERROR" + event.target.errorCode);
      }

      store.put({value: storagedata});

      transaction.complete = function() {
        db.close();
      }
    }
...