首頁 > web前端 > js教程 > 主體

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

Patricia Arquette
發布: 2024-10-22 19:01:21
原創
247 人瀏覽過

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

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中文網其他相關文章!

來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!