IndexedDB return 值延迟
IndexedDB return value Deferred
我有一个小的 javascript 项目,我使用 indexedDB 来存储一些 values.The 问题是 indexedDB 是异步的,我不能 return 来自 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;
}
};
}
我正在尝试 return 键存储的对象 email.console.log 在控制台中打印出对象,但是当 return request.result 被分配时 returns 没用的东西。
我可以看到这个站点上已经有很多关于异步操作的问题,包括延迟函数,但考虑到我对 javascript 的有限知识,我似乎无法理解它,所以如果有人可以向我解释如何做我return找到的值.onsuccess
如果您在项目中使用 jQuery,则可以使用 deferred
或 jQuery。 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);
});
我有一个小的 javascript 项目,我使用 indexedDB 来存储一些 values.The 问题是 indexedDB 是异步的,我不能 return 来自 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;
}
};
}
我正在尝试 return 键存储的对象 email.console.log 在控制台中打印出对象,但是当 return request.result 被分配时 returns 没用的东西。 我可以看到这个站点上已经有很多关于异步操作的问题,包括延迟函数,但考虑到我对 javascript 的有限知识,我似乎无法理解它,所以如果有人可以向我解释如何做我return找到的值.onsuccess
如果您在项目中使用 jQuery,则可以使用 deferred
或 jQuery。 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);
});