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 操作提供了靈活高效的解決方案。根據您的應用要求,您可以選擇最適合您需求的模式。
以上是如何實作 Promise Retry 設計模式以實現高效率的錯誤處理?的詳細內容。更多資訊請關注PHP中文網其他相關文章!