Promise 재시도 디자인 패턴: 메모리 효율적인 접근 방식
Promise를 사용할 때 오류가 발생하거나 특정 조건이 충족될 때까지 작업을 재시도합니다. 충족되는 것은 일반적인 요구 사항입니다. 이 기사에서는 세 가지 Promise 재시도 디자인 패턴을 살펴보겠습니다.
1. Promise가 해결될 때까지 재시도
이 패턴은 Promise가 해결될 때까지 계속 재시도합니다. 최대 재시도 횟수와 시도 간 지연 시간을 지정합니다.
<code class="javascript">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(); }); };</code>
2. 결과의 조건이 충족될 때까지 재시도
이 패턴은 Promise의 결과에서 지정된 조건이 충족될 때까지 재시도합니다. 또한 최대 재시도 횟수와 시도 간 지연 시간도 포함됩니다.
<code class="javascript">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);</code>
3. 메모리 효율적인 동적 재시도
이 패턴은 재귀적 접근 방식을 사용하여 구성 가능한 지연으로 무제한 재시도를 제공합니다.
<code class="javascript">var max = 5; var p = Promise.reject(); for(var i=0; i<max; i++) { p = p.catch(attempt).then(test).catch(rejectDelay); } p = p.then(processResult).catch(errorHandler);</code>
.catch() 체인을 구축함으로써 이 패턴은 다음을 허용합니다. 특히 최대 재시도 횟수가 낮은 시나리오나 동기 테스트에서 간결한 재시도 구현을 위해 사용됩니다.
이러한 각 패턴은 Promise 작업 재시도를 위한 유연하고 효율적인 솔루션을 제공합니다. 애플리케이션 요구 사항에 따라 가장 적합한 패턴을 선택할 수 있습니다.
위 내용은 효율적인 오류 처리를 위해 약속 재시도 디자인 패턴을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!