Error "Se intentó una operación de mutación en una base de datos que no permitía mutaciones". Al recuperar datos en IndexedDB

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

  •  22-10-2019
  •  | 
  •  

Pregunta

Tengo este código de ejemplo simple:

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

Estoy obteniendo esto:

Se intentó una operación de mutación en una base de datos que no permitía mutaciones ". Código:" 6

en línea

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

No puedo entender, ¿qué hago mal?

¿Fue útil?

Solución 2

Creo que encontré la respuesta. No debería acceder a ObjectStore dentro de OnComplete. Solo necesito hacerlo después de hacer una nueva transacción. La forma correcta es esta:

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

Por cierto, así es como se muestra exactamente el MDN de Mozilla. https://developer.mozilla.org/en/indexeddb/using_indexeddb#section_10

Otros consejos

Puede crear o eliminar un almacén de objetos solo en una transacción de VersionChange

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

No probé ese código, pero a juzgar por la documentación No debe pasar una lista vacía como primer parámetro para db.transaction() - Debería ser db.transaction(["customers"], ...) Porque quieres trabajar con esa tienda de objetos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top