要求:实现 Promise.retry,成功后 resolve 结果,失败后重试,尝试超过一定次数才真正的 reject。
Promise.retry = (fun, limit = 5) => {
return new Promise((resolve, reject) => {
let __num = 1;
let __run = () => {
fun()
.then(res => {
resolve(res);
})
.catch(err => {
if (__num++ >= limit) {
reject(err)
} else {
console.log('retry again!!')
__run()
}
})
}
__run()
})
}
let k = 0
function test () {
return new Promise((resolve, reject) => {
if (++k >= 3) {
resolve(k)
} else {
reject('hhh')
}
})
}
Promise.retry(test).then(res => {
console.log('resolve: ', res)
}).catch(err => {
console.log('reject: ', err)
})
// retry again!!
// retry again!!
// resolve: 3