«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как реализовать шаблоны проектирования Promise Retry для эффективной обработки ошибок?

Как реализовать шаблоны проектирования Promise Retry для эффективной обработки ошибок?

Опубликовано 10 ноября 2024 г.
Просматривать:855

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

Шаблоны проектирования повтора промисов: подход с эффективным использованием памяти

При использовании промисов повторение операций в случае сбоя или до тех пор, пока не будут выполнены определенные условия удовлетворена общая потребность. В этой статье мы рассмотрим три шаблона проектирования повторов обещаний:

1. Повторять до тех пор, пока обещание не будет разрешено

Этот шаблон будет повторяться до тех пор, пока обещание не будет решено. Он определяет максимальное количество повторов и задержку между попытками.

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. Повторять до тех пор, пока не будет выполнено условие результата

Этот шаблон повторяет попытки до тех пор, пока в результате обещания не будет выполнено указанное условие. Он также включает максимальное количество повторов и задержку между попытками.

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