我在使用匿名函数 Node js 时遇到问题,想知道如何从异步函数中获取数据。这样它会返回空的 Web api,因为它在异步调用 sqlite 结束之前返回
restapi.get('/data', function(req, res){
var array = [];
db.each("SELECT value FROM counts", function(err, row){
array.push(row);
});
res.json(array);
});
有人可以向我解释一下它是如何工作的以及解决方法吗?谢谢
最佳答案
这就是使用回调进行异步编程的全部要点。异步函数不返回结果,而是接受回调,该回调将在作业完成后立即触发。回调将接收异步工作的结果作为其参数。
不要期望异步函数返回任何内容。相反,将结果处理逻辑嵌套在传递给该函数的回调中。
因此,您的截图应如下所示:
restapi.get('/data', function(req, res){
var array = [];
db.each("SELECT value FROM counts", function(err, row) {
if (row) {
array.push(row);
}
else {
res.json(array); // When there are no more rows
}
});
});
使用平面回调非常痛苦。这种无休止的嵌套往往会让你的代码变得非常困惑。如果您为回调命名,并使用命名版本而不是嵌套,您可以帮助自己。这只会让你到目前为止。更好的解决方案是使用控制流库,如 async 。但是,要使其正常工作,所有回调都必须是可组合的——也就是说,遵循接受错误对象作为第一个参数的约定。请参阅this explaination ,例如。
关于node.js - Nodejs 获取数据异步函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25666820/