Errore “operazione Una mutazione ha tentato su un database che non permetteva mutazioni.” quando il recupero dei dati in IndexedDB

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

  •  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

?
È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top