Errore “operazione Una mutazione ha tentato su un database che non permetteva mutazioni.” quando il recupero dei dati in IndexedDB
-
22-10-2019 - |
Domanda
Ho questo codice di esempio semplice:
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');
};
};
};
sto ottenendo questo:
Un'operazione di mutazione ha tentato su un database che non permetteva mutazioni "Codice:". 6
on line
var objectStore = transaction.objectStore('customers');
Non riesco a capire - Che cosa faccio di sbagliato
?Soluzione 2
Penso che ho trovato la risposta. Io non dovrebbe accesso ObjectStore all'interno onComplete. Ho solo bisogno di farlo dopo aver effettuato nuova transazione. modo giusto è questo:
var transaction = db.transaction([], IDBTransaction.READ_WRITE, 2000);
transaction.oncomplete = function(){
console.log("Success transaction");
};
var objectStore = transaction.objectStore('customers');
A proposito, questo è esattamente come spettacoli MDN di Mozilla. https://developer.mozilla.org/en/IndexedDB/Using_IndexedDB#section_10
Altri suggerimenti
È possibile creare o eliminare un archivio di oggetti solo in una transazione versionchange
vedi: https://developer.mozilla.org/en-US/ docs / IndexedDB / IDBDatabase
non ho provato quel codice, ma a giudicare dalle la documentazione non si dovrebbe passare una lista vuota come primo parametro db.transaction()
-. dovrebbe essere piuttosto db.transaction(["customers"], ...)
perché si vuole lavorare con quel negozio oggetto