2016-02-14 3 views
3

Я хочу вызвать две функции и получить результаты параллельно, но один из результатов функции необходимо адаптировать. Таким образом, функция структура:Могу ли я использовать async.waterfall внутри async.parallel?

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

}

Однако, это только кажется, висят там навсегда. не знаю, могу ли я использовать async таким образом ....

ответ

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

Смежные вопросы