Ошибка «операция мутации была предпринята в базе данных, которая не позволяла мутации». При получении данных в IndexedDB

StackOverflow https://stackoverflow.com/questions/7301064

  •  22-10-2019
  •  | 
  •  

Вопрос

У меня есть этот простой пример кода:

var request = mozIndexedDB.open('MyTestDatabase');
request.onsuccess = function(event){
  var db = event.target.result;
  var request = db.setVersion('1.0');
  request.onsuccess = function(event){
    console.log("Success version.");
    if(!db.objectStoreNames.contains('customers')){
      console.log("Creating objectStore");
      db.createObjectStore('customers', {keyPath: 'ssn'});
    }
    var transaction = db.transaction([],  IDBTransaction.READ_WRITE, 2000);
    transaction.oncomplete = function(){
      console.log("Success transaction");
      var objectStore = transaction.objectStore('customers');
    };
  };
};

Я получаю это:

Операция мутации была предпринята в базе данных, которая не разрешала мутации ». Код:« 6

онлайн

var objectStore = transaction.objectStore('customers');

Не могу понять - что мне делать не так?

Это было полезно?

Решение 2

Я думаю, что нашел ответ. Я не должен получить доступ к объектному магазину внутри Oncomplete. Мне просто нужно сделать это после создания новой транзакции. Правильно это:

var transaction = db.transaction([],  IDBTransaction.READ_WRITE, 2000);
    transaction.oncomplete = function(){
      console.log("Success transaction");
    };
var objectStore = transaction.objectStore('customers');

Кстати, вот как именно показывает MDN Mozilla. https://developer.mozilla.org/en/indexeddb/using_indexeddb#section_10

Другие советы

Вы можете создать или удалить хранилище объекта только в транзакции обмена версии

видеть: https://developer.mozilla.org/en-us/docs/indexeddb/idbdatabase

Я не пробовал этот кодекс, но судил по документация Вы не должны передавать пустой список в качестве первого параметра db.transaction() - это должно быть db.transaction(["customers"], ...) Потому что вы хотите работать с этим магазином объектов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top