与异步系列控制流混淆

1 asynchronous node.js

我是nodejs.i的新手.想要连续两个任务.我使用异步模块

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

console.log("end");
Run Code Online (Sandbox Code Playgroud)

我希望结果是

step 1
step 2
end
Run Code Online (Sandbox Code Playgroud)

但结果是

step 1
end
Run Code Online (Sandbox Code Playgroud)

为什么?

log*_*yth 5

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

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

console.log("end");
Run Code Online (Sandbox Code Playgroud)

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

例如

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");
});
Run Code Online (Sandbox Code Playgroud)