」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何實作 Promise Retry 設計模式以實現高效率的錯誤處理?

如何實作 Promise Retry 設計模式以實現高效率的錯誤處理?

發佈於2024-11-10
瀏覽:343

How to Implement Promise Retry Design Patterns for Efficient Error Handling?

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 操作提供了靈活且高效的解決方案。根據您的應用程式要求,您可以選擇最適合您需求的模式。

版本聲明 本文轉載於:1729587326如有侵犯,請洽[email protected]刪除
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3