<div>
<h1>Promise.retry尝试异步请求</h1>
</div>
<script>
function fn () {
const time = Math.random()
return new Promise((resolve, reject) => {
// 可以做一些异步操作
setTimeout(() => {
if(time > 0.9) {
resolve(time)
} else {
reject(time)
}
}, 1000)
})
}
Promise.retry = (fn, times) => {
new Promise(async (resolve, reject) => {
while(times--) {
try {
const res = await fn()
console.log('发送成功', res)
resolve(res)
break;
} catch(error) {
console.log('发送失败', error)
if(times === 0) {
reject(error)
}
}
}
}).catch(() => {
console.log('全部次数尝试完成,执行失败!')
})
}
Promise.retry(fn, 3)
</script>