2016-07-04 5 views
0

だから私は、ノードに次のコード構造を持っている:私のsecondTaskasync.parallelコールのネストですか?

async.parallel({ 
    firstTask: function firstTask(callback) { 
     var firstCall = makeNetworkCall(); 
     callback(null, firstCall); 
    }, 
    secondTask: function secondTask(callback) { 
     var secondTaskInputArguments = [1, 2, 3, 4, 5]; 
     // want to make five parallel network calls to the same endpoint, 
     // with each one of these five network requests 
     // taking an item from the above list as input 
    } 
}, 
function handler(err, results) { 
    var firstCallResults = results.firstCall; 
    // want to also grab five results from five parallel network calls in secondTask 
}); 

を、私は第2のエンドポイントに5つの並行リクエストを作りたいです。これを行う最善の方法は何ですか? async.parallelコールをネストすることができます(つまり、async.parallelコールを2番目のタスクに入れます)が、これは面倒です。私はちょうど外側のasync.parallelに5つのパラレルコールを置くこともできますが、乱雑です。このようなことを達成するための好ましい方法は何ですか? (おそらく異なる構文ですか?)

答えて

0

async.forEachを使用してください。あなたは議論の配列を持っているので、これは完璧なケースです! async.forEachは、配列の各要素で提供されている関数を呼び出し、それらの関数のコールバックが呼び出されるたびにコールバックします。 async.forEachのコールバックに渡されたエラーがあれば、そのコールバックコードが実行されることに注意してください。

async.parallel({ 
    firstTask: function firstTask(callback) { 
     var firstCall = makeNetworkCall(); 
     callback(null, firstCall); 
    }, 
    secondTask: function secondTask(callback) { 
     var secondTaskInputArguments = [1, 2, 3, 4, 5]; 
     async.forEach(secondTaskInputArguments, function secondTaskApiCalls(input, callback) { 
     // do a thing for each input 
     callback(null, response) 
    }, function allDone(err, result) { 
     // do a thing with all the results 
     // this is called once all results are in OR if err is ever passed 
     // as a truthy value 
     callback(null, processedResults) 
    }) 
    } 
}, 
function handler(err, results) { 
    var firstCallResults = results.firstCall; 
    // want to also grab five results from five parallel network calls in secondTask 
}); 
関連する問題