Promise 重试设计模式:一种节省内存的方法
使用 Promise 时,在失败时重试操作或直到满足某些条件为止得到满足是一种共同的需求。在本文中,我们将探讨三种 Promise 重试设计模式:
1。重试直到 Promise 解决
此模式不断重试,直到 Promise 解决。它指定最大重试次数和尝试之间的延迟。
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.重试直到满足结果条件
此模式会重试,直到满足 Promise 结果的指定条件。它还包括最大重试次数和尝试之间的延迟。
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