function retry(fn, times, timeout = 100) {
return new Promise((resolve, reject) => {
const attamp = () => {
console.log('times %c⧭', 'color: #d90000', times);
fn().then(res => {
resolve(res)
}).catch(err => {
if (times === 0) {
reject(err)
return
}
times--
setTimeout(attamp, timeout)
})
}
attamp()
})
}
function request() {
let random = Math.random()
return new Promise((resolve, reject) => {
if (random > 0.9) {
console.log('%c⧭', 'color: #0088cc', random);
resolve({
code: 200,
msg: 'success'
})
} else {
console.log('%c⧭', 'color: #917399', random);
reject({
code: 500,
msg: 'error'
})
}
})
}
const res = retry(request, 10, 1000)
console.log(res)