Fehler "Eine Mutationsoperation wurde in einer Datenbank versucht, die keine Mutationen zulässt." Beim Abrufen von Daten in indexedDB

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

  •  22-10-2019
  •  | 
  •  

Frage

Ich habe diesen einfachen Beispielcode:

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

Ich verstehe das:

Eine Mutationsoperation wurde in einer Datenbank versucht, die keine Mutationen zulässt. "Code:" 6

online

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

Kann ich nicht herausfinden - was mache ich falsch?

War es hilfreich?

Lösung 2

Ich glaube, ich habe die Antwort gefunden. Ich sollte nicht auf ObjectStore in OnComplete zugreifen. Ich muss es nur nach einer neuen Transaktion tun. Richtiger Weg ist das:

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

Übrigens, so genau Mozillas MDN zeigt. https://developer.mozilla.org/en/indexeddb/using_indexeddb#section_10

Andere Tipps

Sie können einen Objektspeicher nur in einer VersionsChange -Transaktion erstellen oder löschen

sehen: https://developer.mozilla.org/en-us/docs/indexeddb/idbdatabase

Ich habe diesen Code nicht ausprobiert, aber nach Beurteilung nach die Dokumentation Sie sollten keine leere Liste als erster Parameter übergeben db.transaction() - Es sollte lieber sein db.transaction(["customers"], ...) Weil Sie mit diesem Objektgeschäft arbeiten möchten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top