我可以在async.parallel中使用async.waterfall吗?

时间:2016-02-14 02:17:14

标签: javascript asynchronous parallel-processing waterfall

我想调用两个函数并且并行获得结果,但需要调整函数的一个结果。所以功能结构是:

function test(cb) {
async.parallel({
    func1: function foo(cb1) {
        cb(null, {});
    },
    func2: function bar(cb2) {
        async.waterfall([
            function adapt1(next) {
                //do something;
            },
            function adapt2(next) {
                //do something;
            }
        ], function handler(err, res) {
            //do something.
        })
    }
}, function handler2(err, res) {
    cb(null, {});
})

}

然而,它似乎永远挂在那里。不确定我是否可以这样使用异步....

1 个答案:

答案 0 :(得分:3)

当然可以!你必须确保以正确的顺序和首先调用你的回调。例如,func1应该调用cb1而不是cb。其次,你的瀑布根本没有调用它们的回调。 以此代码为例。

'use strict';

let async = require('async');

function test(callback) {
  async.parallel({
    func1: function(cb) {
      cb(null, { foo: 'bar' });
    },
    func2: function(cb) {
      async.waterfall([
        function(cb2) {
          cb2(null, 'a');
        },
        function(prev, cb2) {
          cb2(null, 'b');
        }
      ], function(err, result) {
        cb(err, result);
      });
    }
  }, function(err, results) {
    callback(err, results);
  });
}

test(function(err, result) {
  console.log('callback:', err, result);
});

输出:callback: null { func1: { foo: 'bar' }, func2: 'b' }