接收一个异步操作的函数和重试次数,如果操作失败,则进行重试,直到达到最大重试次数或操作成功。
关键点:返回一个Promise。执行attempt,当任务catch时计数并迭代
function promiseRetry(asyncFn, maxRetries) {
return new Promise((resolve, reject) => {
let retries = 0;
function attempt() {
asyncFn()
.then(resolve)
.catch((error) => {
retries++;
if (retries <= maxRetries) {
attempt();
} else {
reject(error);
}
});
}
attempt();
});
}