请求错误时自动重新请求

392 阅读1分钟

题目 Promise reject的时候自动retry 例子 开发Web App的时候,调取API是再常见不过的事情了。

不过因为网络问题API可能会失败。通常情况下我们可以提示错误,然后让用户重试。

另外一种方案是 遇到网络问题时自动重试

请实现一个fetchWithAutoRetry(fetcher, count),当出错的时候会自动重试,直到最大的重试次数。

该问题中,你不需要判断错误是否是网络错误,所有rejection都认为网络错误即可。

答案 需要注意的是这个fetcher不需等于原生fetch,直接then就行了。

function fetchWithAutoRetry(fetcher, maximumRetryCount) {
  return new Promise((resolve, reject) => {
    function _fetcher(last) {
      return fetcher().then(res => resolve(res)).catch((err) => {
        if (last == 0) {
          reject(err);
        } else {
          _fetcher(last - 1)
        }
      })
    }
    _fetcher(maximumRetryCount)
  })
}