-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
Description
//模拟请求逻辑
function asyncRequest(){
return new Promise((resolve, reject) => {
if(1){
reject('reject');
}else{
resolve('resolve');
}
})
}
/**
*
* @param {Promise} asyncRequest 需要重试的函数
* @param {number} times 重试次数
* @param {number} delay 多久后进行下一次重试
* @returns {Promise}
*/
function reTry(asyncRequest, time, delay){
return asyncRequest().catch(async err => {
if(--time){
await new Promise((resolve) => {
setTimeout(resolve, delay);
})
return reTry(asyncRequest, time, delay);
}else{
throw '请求失败' + err;
}
})
}
reTry(asyncRequest, 3, 2000).then(value => {
console.log(value + "成功");
}, err => {
console.log(err + "失败");
})
输出
reject 3
reject 2
reject 1
请求失败reject失败