题目要求
手写一个函数,发送任意多个请求,其中有失败的,重发请求,直到所有的都成功或者超出最大重试的次数,才返回最终的结果。
代码
逻辑在注释里,看注释解释
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
function requestAll(urls = [], maxTries = 3) { return Promise.allSettled(urls.map(url=>singleRequest(url,maxTries))) }
function singleRequest(url, maxTries = 3) { return new Promise((resolve, reject) => { let requestCount = 0; function _request(url) { fetch(url).then((res) => { const data = res.json(); resolve(data); }).catch(err => { if (requestCount++ <= maxTries) { console.warn('Request Error,but requestCount is ' + requestCount) _request(url); } else { reject(err); } }) } _request(url); }) }
|