与异步序列控制流混淆

独奏

我是nodejs的新手,我想连续执行两个任务。我使用异步模块

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

为什么?

对数神话

每个函数都是异步的,因此会传递一个回调。为了继续进行下一步,您需要调用回调。

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

console.log("end");

请注意,这将完成您想要的操作,但是您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");
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章