将 async.parallel 转换为 async.auto

Transform async.parallel to async.auto

我有一个带有 2 个函数的 async.parallel,现在我需要转换为 async.auto 或 async.waterfall,因为我需要将一个值从第一个函数传递到第二个函数。

两个函数都return一个数组。在第二个函数中,参数 timeAdjust 的值来自 array1.timeAdjust

谁能帮帮我?

代码:

router.get('/:machineID', function(req, res, next) {
    var machineID = req.params.machineID;

    async.parallel({
        one: function(callback){
            auxPrinters.function1(machineID, 'ent', function(array1){
                callback(null, array1);
            });
        },
        two: function(callback){
            auxPrinters.function2(machineID, 'ent', timeAdjust, function(array2){
                callback(null, array2);
            });
        },      
    },
    function(err, results){  //results.one=array1 & results.two=array2
        if(err) {console.log("****** ERROR:"); console.log(err);}
        else{
            console.dir(results);
            res.render('jobs', {title: 'Job Info', results});
        }
    });
});

这是你的答案,但在此之前你想写 array1.timeAdjust if array 是一个数组对我来说很奇怪,所以我只相信 array1 是一个对象

router.get('/:machineID', function(req, res, next) {
    var machineID = req.params.machineID;

    async.waterfall([
        function(callback){
            auxPrinters.function1(machineID, 'ent', function(array1){
                callback(null, array1);
            });
        },
        function(array1, callback){
            var result = {}
            result.one = array1
            timeAdjust = array1.timeAdjust
            auxPrinters.function2(machineID, 'ent', timeAdjust, function(array2){
                result.two = array1
                callback(null, result);
            });
        },      
    ],
    function(err, results){  //results.one=array1 & results.two=array2
        if(err) {console.log("****** ERROR:"); console.log(err);}
        else{
            console.dir(results);
            res.render('jobs', {title: 'Job Info', results});
        }
    });
});

如您所见,我没有通过 array.timeAdjust,而是完整的 array1,因为您希望在最终回调中使用 array1 和 array2

最终解决方案:

async.waterfall([
        function(callback){
            console.log("****** ASYNC JOBS 1");
            auxPrinters.function1(machineID, 'ent', function(array1){
                callback(null, array1);
            });
        },
        function(array1, callback){
            console.log("****** ASYNC JOBS 2");
            auxPrinters.function2(machineID, 'ent', array1, function(array2){
                callback(null, array1, array2);
            });
        },      
    ],
    function(err, array1, array2){
        if(err) {console.log("****** ERROR ASYNC:"); console.log(err);}
        else{
            res.render('jobs', {title: 'Job Info', array1, array2});
        }
    });