从异步函数获取数据
我有这个代码:
function getData(){
db.transaction(function(tx){
tx.executeSql('SELECT * from q', [], function(tx, result){
var q = [];
for (var i=0; i < result.rows.length; i++) {
q.push(result.rows.item(i));
};
console.log(q.length); // 3
returnData(q);
});
});
}
function returnData(data){
console.log(data.length); // 3
return data;
}
var q = getData(); // undefined
它没有按预期工作(它不返回任何内容)。假设发生了这种情况,因为 db.transaction 是异步工作的,但我使用回调来返回数据。有人可以解释为什么它不起作用以及如何解决这个问题吗?
i have this code:
function getData(){
db.transaction(function(tx){
tx.executeSql('SELECT * from q', [], function(tx, result){
var q = [];
for (var i=0; i < result.rows.length; i++) {
q.push(result.rows.item(i));
};
console.log(q.length); // 3
returnData(q);
});
});
}
function returnData(data){
console.log(data.length); // 3
return data;
}
var q = getData(); // undefined
and it don't work as expected (it don't return anything). A assume that happened, because db.transaction
work asynchronous, but i'm using callback to return data. Can somebody explain why it doesn't work and how to fix that?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
执行此操作的标准方法是包含您自己的回调,如下所示:
The standard way to do this is to include your own callback, like this:
您不返回任何异步操作的结果,而是监听它。
在您的代码中,
returnData
确实返回了数据,但是如果您不对结果执行任何操作,它就会被丢弃。相反,您应该使用自己的回调。You don't return the result of any async action, instead you listen for it.
In your code
returnData
does return the data, but the you dont do anything with the result, it's discarded. Instead, you should use your own callback.