与异步系列控制流混淆

时间:2013-12-20 03:40:50

标签: node.js asynchronous

我是nodejs.的新手。我想连续两个任务。我使用 async 模块

var async = require('async');
async.series([
    function () {
        console.log("step 1");
    }, function () {
        console.log('step 2');
    }]);

console.log("end");

我希望结果是

step 1
step 2
end

但结果是

step 1
end

为什么?

1 个答案:

答案 0 :(得分:5)

每个函数都是异步的,因此传递回调函数。要使其进入下一步,您需要调用回调。

var async = require('async');
async.series([
    function (callback) {
        console.log("step 1");
        callback();
    },
    function (callback) {
        console.log('step 2');
        callback();
    }
]);

console.log("end");

请注意,这可以达到你想要的效果,但你的end仍然处于一个奇怪的地方。系列回调实际上并不是异步的,所以一切都会同步运行。如果它全部以异步方式运行,那么您的结束回调将在某处运行。真的,它应该是最终的回调。

e.g。

var async = require('async');
async.series([
    function (callback) {
        console.log("step 1");
        setTimeout(callback, 100);
    },
    function (callback) {
        console.log('step 2');
        setTimeout(callback, 100);
    }
], function(err){
    console.log("end");
});