2016-02-14 116 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

相關問題