「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 効率的なエラー処理のために Promise Retry デザイン パターンを実装するにはどうすればよいですか?

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

2024 年 11 月 10 日に公開
ブラウズ:670

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

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

Promise を使用する場合、失敗した場合、または特定の条件が満たされるまで操作を再試行します。共通のニーズを満たしています。この記事では、

1 の 3 つの Promise 再試行設計パターンを検討します。 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