Fehler "Eine Mutationsoperation wurde in einer Datenbank versucht, die keine Mutationen zulässt." Beim Abrufen von Daten in indexedDB
-
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?
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.