无法在同步模式NODEJS中运行功能

时间:2015-03-06 17:50:31

标签: node.js

我使用异步模块按顺序运行函数列表,但只执行名为getBaseLineList的第一个函数。第二个没有?我希望他们一个接一个地跑。

的NodeJS

function getBaseLineList(){
    var data=['a','b','c'];
    console.log("Inside getBaseLineList");
    return data;
}

function getBaseLineDetails(data){
    console.log("After we get the list"+data);
}

var data =[];
async.series([
    function(callback){    
        data = getBaseLineList();   
    },
    function(callback){
        getBaseLineDetails(data);
    }
]);

app.listen(port, host);
console.log('App started on port ' + port);

2 个答案:

答案 0 :(得分:1)

async.series内的函数会收到一个callback参数,但你永远不会调用它。 async在调用下一个函数之前等待你调用回调。

如果getBaseLineListgetBaseLineDetails是同步的,您可以这样做:

var data =[];
async.series([
    function(callback){    
        data = getBaseLineList();
        callback();
    },
    function(callback){
        getBaseLineDetails(data);
        callback();
    }
]);

...但是如果它们是同步的,你不应该使用异步 - 你应该一个接一个地调用。

如果它们是异步的,您需要将callback传递给它们中的每一个并让它们在完成时调用它。但是,如果没有看到实际的异步代码,我无法真正告诉你如何做到这一点。

答案 1 :(得分:0)

嗯,你可以使用async.waterfall

async.waterfall([
    function(callback){    
        callback(null, getBaseLineList());
    },
    function(data, callback){
        getBaseLineDetails(data);
        callback();
    }
], function(err, result) {
    app.listen(port, host);
    console.log('App started on port ' + port);
});