Erreur « Une opération de mutation a été tentée sur une base de données qui ne permettait pas à des mutations. » lors de la récupération des données dans IndexedDB

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

  •  22-10-2019
  •  | 
  •  

Question

J'ai ce code simple exemple:

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');
    };
  };
};

Je reçois ceci:

Une opération de mutation a été tentée sur une base de données qui ne permettait pas à des mutations "code:". 6

en ligne

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

ne peuvent pas comprendre - qu'est-ce que je fais mal

?
Était-ce utile?

La solution 2

Je pense avoir trouvé la réponse. Je ne devrais pas l'accès à l'intérieur ObjectStore onComplete. J'ai juste besoin de le faire après avoir fait une nouvelle transaction. Bonne façon est la suivante:

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

BTW, voici comment exactement montre Mozilla ou MDN. https://developer.mozilla.org/en/IndexedDB/Using_IndexedDB#section_10

Autres conseils

Vous pouvez créer ou supprimer un magasin d'objets uniquement dans une transaction versionchange

voir: https://developer.mozilla.org/en-US/ docs / IndexedDB / IDBDatabase

Je n'ai pas essayé ce code mais à en juger par la documentation vous ne devriez pas passer une liste vide comme premier paramètre à db.transaction() -. il devrait plutôt être db.transaction(["customers"], ...) parce que vous voulez travailler avec ce magasin d'objets

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top