const retry = (fetchFn, times = 3) => {
return new Promise(async (resolve, reject) => {
while (times--) {
try {
const ret = await fetchFn();
resolve(ret);
break;
} catch (err) {
if (!times) reject(err)
}
}
})
}
const fetch = () => {
const n = Math.random();
return new Promise((resolve, reject) => {
if (n > 0.1) {
reject(1);
} else {
resolve('666')
}
})
}
retry(fetch,5).then((e) => {
console.log('resolve ' + e)
}).catch(e => {
console.log('reject ' + e)
});
在fetch中写请求逻辑,成功了就Resolve,失败了就Reject。
然后times次过后还不行就Catch。