以下为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。