Home > Web Front-end > JS Tutorial > body text

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

Patricia Arquette
Release: 2024-10-22 19:01:21
Original
313 people have browsed it

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

Promise Retry Design Patterns: A Memory-Efficient Approach

When using Promises, retrying operations in the face of failures or until certain conditions are met is a common need. In this article, we will explore three Promise retry design patterns:

1. Retry Until Promise Resolves

This pattern keeps retrying until the Promise resolves. It specifies a maximum retry count and a delay between attempts.

<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>
Copy after login

2. Retry Until Condition on Result is Met

This pattern retries until a specified condition is met on the Promise's result. It also includes a maximum retry count and a delay between attempts.

<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>
Copy after login

3. Memory-Efficient Dynamic Retry

This pattern uses a recursive approach, offering unlimited retries with a configurable delay.

<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>
Copy after login

By building a .catch() chain, this pattern allows for concise retry implementations, especially in scenarios with low maximum retry counts or synchronous tests.

Each of these patterns provides a flexible and efficient solution for retrying Promise operations. Depending on your application's requirements, you can choose the pattern that best suits your needs.

The above is the detailed content of How to Implement Promise Retry Design Patterns for Efficient Error Handling?. For more information, please follow other related articles on the PHP Chinese website!

source:php
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template