こんな感じ
function retry(count, iterator, callback) { // TODO: count は 0 より大きい整数であり、かつ大きすぎない値である事をチェックする var iterate = function() { iterator(function(err, result) { if(err && --count < 1) { callback(err); } else if(err) { iterate(); } else { callback(null, result); } }); }; iterate(); } retry(3, function(next) { var random = Math.random(); console.log('random:', random); if (random < 0.7 ) { return next('err'); } next(null, random); }, function(err, result) { if (err) { return console.log(err); } console.log(err, result); });