我有一个小的javascript项目,我使用indexedDB来存储一些值。问题是indexedDB是异步的,我无法从request.onsuccess返回一个值。:
function read(email) {
var transaction = db.transaction(["usuario"]);
var objectStore = transaction.objectStore("usuario");
var request = objectStore.get(email);
request.onerror = function (event) {
console.log("No se pudieron sacar los datos de la base de datos!");
};
request.onsuccess = function (event) {
if (request.result) {
console.log(request.result);
}
else {
console.log(email + " no se encontro en la BD!");
return true;
}
};
}
我正在尝试返回密钥email.console.log存储的对象,在控制台中输出对象,但是当返回request.result时,它会返回无用的东西。 我可以看到有很多关于异步操作的问题,包括Deffered函数,但考虑到我对javascript的有限知识,我似乎无法掌握它,所以如果有人可以请我解释如何返回找到的价值.onsuccess
答案 0 :(得分:0)
如果您在项目中使用jQuery,那么可以使用jQuery的deferred
。 Jose on Code对此有一个非常好的解释。
function read(email) {
var deferred = $.Deferred();
var transaction = db.transaction(["usuario"]);
var objectStore = transaction.objectStore("usuario");
var request = objectStore.get(email);
request.onerror = function(event) {
console.log("No se pudieron sacar los datos de la base de datos!");
};
request.onsuccess = function(event) {
if (request.result) {
console.log(request.result);
deferred.resolve(request.result);
} else {
console.log(email + " no se encontro en la BD!");
return true;
}
};
return deferred;
}
read(mail).done(function(value) {
alert(value);
});