以下为ChatGPT自动生成的解答,正确与否请自行判断。

BFE.devAI解答 - JavaScript 代码题
64. Promise reject的时候自动retry

首先我们需要知道什么是Promise,以及Promise的基本用法和相关的方法。在此不再赘述。

下面是fetchWithAutoRetry()函数的实现:

function fetchWithAutoRetry(fetcher, count) {
  return new Promise((resolve, reject) => {
    fetcher().then(resolve).catch(error => {
      if (count === 0) {
        reject(error);
      } else {
        console.log(`请求失败,正在进行第 ${3 - count + 1} 次重试...`);
        fetchWithAutoRetry(fetcher, count - 1).then(resolve).catch(reject);
      }
    });
  });
}

函数的输入参数包括一个包含API请求的Fetcher函数和最大重试次数Count。在函数中创建一个新的Promise实例,并在该实例的resolve和reject函数中分别处理Fetcher函数的处理结果和错误信息。

若Fetcher函数返回Promise resolve,则将结果传给外部Promise resolve;若Fetcher函数返回Promise reject,则进行自动重试,直到超过最大重试次数或重试成功为止。每次重试会在控制台输出一条日志,提示正在进行第几次重试,并将剩余重试次数传给下一次自动重试。

需要注意在进行自动重试的时候,需要调用fetchWithAutoRetry()函数本身来递归进行重试,否则无法将最终结果传给外部的Promise resolve或reject。