2016-05-13 4 views
0

私はノードjs非同期モジュールを使用しています。私はたくさんの並列関数を実行したいと思います。いずれかの関数がエラーを返す場合、私はメインコールバックをすぐに実行したくありません。どの場合でもメインのコールバックが最後に実行されるようにしたいのですが、エラーを返した配列の配列だけでなく、OKになった配列を取得したいと思います。ロジックを追加しなくても可能ですか?ノードjs async - メインコールバックの即時実行を防ぎます

答えて

0

その関数のコールバックでエラーを返す代わりに、エラー配列にエラーをプッシュし、ok項目をok配列にプッシュして、すべてのコールバックを第1引数(callback(null))としてコールします機能。このような何か:あなたは並列呼び出しに成功/失敗した機能の両方のためのちょうど1アレイを有する気にしない場合は

var okArray = []; 
var errorArray = []; 

async.parallel([ 
    function(callback) { 
     // do something 
     if (error) { 
      errorArray.push(errorItem); 
     } else { 
      okArray.push(okItem); 
     } 
     callback(null); 
    }, 
    function(callback) { 
     // do something 
     if (error) { 
      errorArray.push(errorItem); 
     } else { 
      okArray.push(okItem); 
     } 
     callback(null); 
    } 
], function(err) { 
    console.log(okArray); 
    console.log(errorArray); 
}); 

、平行配列にリストされているために、機能ごとに結果の配列を返すん。たとえば、

async.parallel([ 
    function(callback) { 
     // do something 
     if (error) { 
      return callback(null, errorItem); 
     } 
     callback(null, okItem); 
    }, 
    function(callback) { 
     // do something 
     if (error) { 
      return callback(null, errorItem); 
     } 
     callback(null, okItem); 
    } 
], function(err, results) { 
    console.log(results); // results[0] = what 1st function returns 
          // results[1] = what 2nd function returns 
}); 
0

Javascript Promiseオブジェクトを調べてみてください。

すべての並列関数が約束オブジェクトを返すようにして、それらをすべて配列に貼り付けます。 次に、Promise.all([約束])を実行します(コールバック)。 関数が例外をスローしない限り、そのコールバックはすべての関数が実行された後にのみ呼び出されることを保証することができます。

+0

ありがとうございますが、私は非同期に固執したいと思います。 –

関連する問題