Шаблоны проектирования повтора промисов: подход с эффективным использованием памяти
При использовании промисов повторение операций в случае сбоя или до тех пор, пока не будут выполнены определенные условия удовлетворена общая потребность. В этой статье мы рассмотрим три шаблона проектирования повторов обещаний:
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. В зависимости от требований вашего приложения вы можете выбрать шаблон, который лучше всего соответствует вашим потребностям.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3