javascript - No se puede leer la propiedad 'transaction' de undefined en IndexedDB
Estoy usando IndexDB para crear un almacén de objetos de usuarios, pero al intentar agregar usuarios recibo un error en la línea var request=db.transaction(['person'], 'readwrite').
El error dado es:
"Uncaught TypeError: No se puede leer la propiedad 'transaction' de undefined en add (test.js:32) en test.js:45"
Mi guion se ve así:
var request = window.indexedDB.open("connectDB", 1);
request.onerror = function (event)
{
console.log('The database is opened failed');
};
var db;
request.onsuccess = function (event)
{
db = request.result;
console.log('The database is opened successfully');
};
var db;
request.onupgradeneeded = function (event)
{
db = event.target.result;
var objectStore;
if (!db.objectStoreNames.contains('users'))
{
objectStore = db.createObjectStore('users', { keyPath: 'id' });
objectStore.createIndex('name', 'name', { unique: false });
objectStore.createIndex('email', 'email', { unique: true });
}
}
function add()
{
var request = db.transaction(['person'], 'readwrite')
.objectStore('person')
.add({ id: 1, name: 'Jam', age: 24, email: '[email ' });
request.onsuccess = function (event) {
console.log('The data has been written successfully');
};
request.onerror = function (event) {
console.log('The data has been written failed');
}
}
add();
Cualquier ayuda sería apreciada
Respuesta #1
Parece que estás intentando acceder a db durante la llamada a add() cuando no está inicializado (ten en cuenta que esta llamada a add() ocurre inmediatamente cuando se ejecuta tu script).
Sin embargo, la variable db solo se inicializa si la conexión a la base de datos se crea correctamente:
request.onsuccess = function (event)
{
db = request.result;
console.log('The database is opened successfully');
// It is now safe to interact with the database
};
Hay varias formas de abordar este problema, aunque la más simple sería mover tu llamada a add() dentro del manejador onsuccess de la siguiente manera:
request.onsuccess = function (event)
{
db = request.result;
console.log('The database is opened successfully');
add(); // Add this
};
// add(); <-- remove this from the end of your script
Finalmente, noté que tienes dos variables var db; declaradas; considera eliminar una de ellas. ¡Espero que esto ayude!
