思路
1、通过new Promise处理请求的成功和失败,成功则给出响应结果,10秒内3次都失败则抛出异常
2、两种方式:a. 每次重试前获取当前时间戳,减去初始时间,判断是否小于10;b. 通过setInterval,初始10,每秒减1判断是否小于10。
3、记录最大可重试次数,每次重试减1
4、当倒计时10秒结束或者重试3次机会用完,还没有成功,则抛出异常
function fetchData(url) {
return fetch(url).catch(function (e) {
throw e
})
}
function retry(url, times, second) {
return new Promise(function (resolve, reject) {
let initTimestamp = Date.now()
function doRequest() {
fetchData(url)
.then(function (response) {
resolve(response)
})
.catch(function (error) {
let nowTimestamp = (Date.now() - initTimestamp ) / 1000
times--
console.log(`重试第${3 - times}次`)
console.log(`倒计时第${nowTimestamp}秒`)
if (times > 0 && nowTimestamp < second) {
doRequest()
} else {
reject(error)
}
})
}
doRequest()
})
}
retry("https://example.com/data'", 3, 10)
.then(function (response) {
console.log(response)
})
.catch(function (error) {
console.error(error)
})