题目 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)
})
}