ホームページ  >  記事  >  ウェブフロントエンド  >  効率的なエラー処理のために Promise Retry デザイン パターンを実装するにはどうすればよいですか?

効率的なエラー処理のために Promise Retry デザイン パターンを実装するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-22 19:01:21253ブラウズ

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

Promise の再試行デザイン パターン: メモリ効率の高いアプローチ

Promise を使用する場合、失敗した場合、または特定の条件が満たされるまで操作を再試行します。共通のニーズを満たしています。この記事では、次の 3 つの 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. Retry until Condition on Result is Met

このパターンは、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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。