将async.parallel转换为async.auto

时间:2017-04-27 14:43:41

标签: node.js express async.js

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

两个函数都返回一个数组。在第二个函数中,参数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});
        }
    });
});

2 个答案:

答案 0 :(得分:0)

这是你的答案,但在此之前,如果数组是一个数组,你想编写array1.timeAdjust对我来说很奇怪,所以我只相信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

答案 1 :(得分:0)

最终解决方案:

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