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

Как реализовать шаблоны проектирования обещания для обработки ошибок переходного процесса?

Опубликовано в 2025-03-23
Просматривать:330

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

обещание Retry Design Patterns

введение

Когда асинхронные операции не выполняются, повторение может быть эффективной стратегией для обработки преобразовательных ошибок. В этой статье представлены различные шаблоны для повторной операции на основе обещаний, сосредоточившись на трех общих сценариях. Он определяет задержку между повторными и максимальным количеством попыток. вернуть новое обещание (function (Resolve, отклонить) { var ошибка; var попытка = function () { if (times == 0) { отклонить (ошибка); } еще { fn (). Тогда (Resolve) .catch (function (e) { раз ...; ошибка = E; setTimeout (function () {tring ()}, dolement); }); } }; пытаться(); }); }. Он определяет задержку между повторными поисками и максимальным количеством попыток. .then (function (результат) { вернуть новое обещание (function (Resolve, отклонить) { var extralid = setInterval (function () { work.requeststatus (результат) .then (function (result2) { Switch (result2.status) { Дело «прогресс»: перерыв; // ничего не делать Случай "успех": clearInterval (extralid); решимость (результат2); перерыв; случай "сбой": clearInterval (extralid); отклонить (результат2); перерыв; } }). Catch (function (erron) {clearInterval (extralid); отклонить (ошибку)}); }, 1000); }); }) .Then (function () {console.log ('dode')}) .catch (console.error);

шаблон #3: Unlimited Retry с условием

Этот шаблон обеспечивает эффективный способ повторного ограниченного времени. Он только указывает задержку между Retries.

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();
    });
};

В отличие от приведенных выше шаблонов, этот подход создает цепочку .catch (), а не .Then (). Он ограничивает количество попыток и подходит для сценариев с низким максимумом, чтобы избежать чрезмерного потребления памяти.

decureDelay (sany) { вернуть новое обещание (function (Resolve, отклонить) { setTimeout (dize.bind (null, разум), t); }); }

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);

var max = 5; var p = rapect.reject (); for (var i = 0; i

retry до тех пор, пока условие не встречает, без задержки

var max = 5; var p = rapect.reject (); for (var i = 0; i

function rejectDelay(reason) {
    return new Promise(function(resolve, reject) {
        setTimeout(reject.bind(null, reason), t); 
    });
}

var max = 5; var p = rapect.reject (); for (var i = 0; i

var max = 5;
var p = Promise.reject();

for(var i=0; i 

эти шаблоны предоставляют универсальные способы реализации логики повторного использования для асинхронных операций. Будь то использование цепочек .catch () или .Then () зависит от требований, таких как использование памяти и максимальное количество попыток. ]

Заявление о выпуске Эта статья воспроизводится: 1729587561. Если есть какие -либо нарушения, пожалуйста, свяжитесь с учебным заведением[email protected], чтобы удалить его.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3