Nodejs获取数据异步功能

时间:2014-09-04 13:29:30

标签: node.js

我遇到匿名函数节点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);
});

有人可以解释一下它的工作原理和解决方法吗?谢谢

1 个答案:

答案 0 :(得分:3)

这是使用回调进行异步编程的重点。异步函数(而不是返回结果)接受回调,该回调将在作业完成后立即触发。回调将接收异步工作的结果作为其参数。

不要指望异步函数返回任何内容。相反,将结果处理逻辑嵌套在传递给该函数的回调中。

因此,你的剪辑看起来应该是这样的:

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