あいつの日誌β

働きながら旅しています。

retry したい

こんな感じ

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