2017-03-12 7 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); 
});