Promise 재시도 설계 패턴: 메모리 효율적인 접근 방식
Promise를 사용할 때 실패가 발생하거나 특정 조건이 충족될 때까지 작업을 재시도합니다. 충족되는 것은 일반적인 요구 사항입니다. 이 문서에서는 세 가지 Promise 재시도 디자인 패턴(
1)을 살펴보겠습니다. Promise가 해결될 때까지 재시도
이 패턴은 Promise가 해결될 때까지 계속 재시도합니다. 최대 재시도 횟수와 시도 간 지연을 지정합니다.
Promise.retry = function(fn, times, delay) {
return new Promise(function(resolve, reject) {
var error;
var attempt = function() {
if (times == 0) {
reject(error);
} else {
fn().then(resolve)
.catch(function(e){
times--;
error = e;
setTimeout(function(){attempt()}, delay);
});
}
};
attempt();
});
};
2. 결과의 조건이 충족될 때까지 재시도
이 패턴은 Promise의 결과에서 지정된 조건이 충족될 때까지 재시도합니다. 또한 최대 재시도 횟수와 시도 간 지연 시간도 포함됩니다.
work.publish()
.then(function(result){
return new Promise(function(resolve, reject){
var intervalId = setInterval(function(){
work.requestStatus(result).then(function(result2){
switch(result2.status) {
case "progress": break; //do nothing
case "success": clearInterval(intervalId); resolve(result2); break;
case "failure": clearInterval(intervalId); reject(result2); break;
}
}).catch(function(error){clearInterval(intervalId); reject(error)});
}, 1000);
});
})
.then(function(){console.log('done')})
.catch(console.error);
3. 메모리 효율적인 동적 재시도
이 패턴은 재귀적 접근 방식을 사용하여 구성 가능한 지연으로 무제한 재시도를 제공합니다.
var max = 5;
var p = Promise.reject();
for(var i=0; i.catch() 체인을 구축하면 이 패턴을 통해 특히 최대 재시도 횟수가 낮거나 동기 테스트가 있는 시나리오에서 간결한 재시도 구현이 가능합니다.
이러한 각 패턴은 Promise 작업 재시도를 위한 유연하고 효율적인 솔루션을 제공합니다. 애플리케이션 요구 사항에 따라 요구 사항에 가장 적합한 패턴을 선택할 수 있습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3