前端面试题 - 110.实现一个简单的Promise.retry函数

988 阅读1分钟

接收一个异步操作的函数和重试次数,如果操作失败,则进行重试,直到达到最大重试次数或操作成功。

关键点:返回一个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();
  });
}