以下是我用来从localdb检索信息的代码:
function getById(idObject, typeObjectStore, cb_function)
{
idObject = parseInt(idObject);
var objectStore = db.transaction(typeObjectStore).objectStore(typeObjectStore);
var request = objectStore.get(idObject);
request.onerror = function(event) {
console.log('Error when loading ' + typeObjectStore);
};
request.onsuccess = function(event) {
cb_function(request.result);
};
}
我已经阅读了很多文档,我可以看到检索到的内容通常直接打印在cb_function(回调函数)中。 我想知道是否可以直接返回对象,所以我可以在其余的代码中利用它?
做这样的事情不起作用,但你会得到我想做的事情:
request.onsuccess = function(event) {
return(request.result);
};
我担心不可能考虑检索数据的异步方式,但我想得到确认。
提前谢谢。
此致
Bdloul
答案 0 :(得分:1)
无法以这种方式返回值。回调函数是异步调用的,因为异步调用request.onsuccess。 return语句是同步的。您需要知道如何使用asynchronous Javascript (AJAX)才能使用indexedDB。编写AJAX主要是通过传递回调来完成的,continuation passing style (CPS)。
不是每个人都喜欢CPS,但它是一种非常强大而简单的方式来表达代码中的异步操作,并且迟早在每个JavaScript程序员的职业生涯中,你都应该了解它。
如果您完全尝试返回某些内容,则可以返回promise。承诺并不简单,学习如何使用,并将采取很多理解,所以谨慎行事。
个人(我的主观意见)我不建议尝试使用Promises。我建议您详细了解Function.prototype.bind。您可以使用bind来避免编写嵌套函数。绑定也很难学会如何使用,但它也提供了一种避免嵌套函数的优雅方法。