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 サイトの他の関連記事を参照してください。