2017-03-12 3 views
0

と並行を組み合わせここasync.parallelの使用の簡単な例です:ノードの非同期モジュール:再試行

var fakeTimer = 0; 
async.parallel({ 
    one: function(callback) { 
     if (fakeTimer < 2) { 
      callback(new Error('too soon!'), null); 
      fakeTimer++; 
     } else { 
      callback(null, 'I am one'); 
     } 
    }, 
    two: function(callback) { 
     callback(null, 'I am two'); 
    } 
}, function(err, results) { 
    if (err) { 
     console.log('failed!'); 
    } else { 
     console.log(results); 
    } 
}); 

これを実行すると、もちろん、それは常に失敗に終わります。私がしたいのは、fakeTimerが十分に大きくなり、one関数が成功するまで、再試行を続けます。

したがって、async.parallelのいずれかを再試行できます。 5回、またはone機能のみ。私はasync.retry機能があることを知っていますが、私はちょうどそれを組み合わせる方法について私の頭を得ることができませんasync.parallelと私が欲しいものを達成する。

私は理想的にはasync.parallel全体を再試行しなければならないと思うので、並列ブランチのいずれかでエラーが発生した場合は動作しますが、全体的な再試行とブランチごとの再試行の例を見ると素晴らしいでしょう。

答えて

0

次が動作しているようです:

var fakeTimer = 0; 

var parallelFunctions = { 
    one: function(callback) { 
     if (fakeTimer < 2) { 
      callback(new Error('too soon!'), null); 
      fakeTimer++; 
     } else { 
      callback(null, 'I am one'); 
     } 
    }, 
    two: function(callback) { 
     callback(null, 'I am two'); 
    } 
}; 

var doThemInParallel = function(callback) { 
    async.parallel(parallelFunctions, function(err, results) { 
     callback(err, results); 
    }); 
}; 

var retries = 2; // must be > 2 to succeed 
async.retry(retries, doThemInParallel, function(err, results) { 
    console.log(err, results); 
}); 
関連する問題