与异步系列控制流混淆

 isme7 发布于 2023-02-09 08:18

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

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 个回答
  • 每个函数都是异步的,因此传递回调函数.要使其进入下一步,您需要调用回调.

    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");
    });
    

    2023-02-09 08:25 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有