2016-02-14 162 views
3

我想调用两个函数并且得到并行的结果,但是需要调整函数的一个结果。因此,功能结构为:我可以在async.parallel中使用async.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, {}); 
}) 

}

然而,它只是似乎挂在那里,直到永远。不知道我是否可以用这种方式使用异步....

回答

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' }

+0

太感谢你了! – JudyJiang

相关问题