参考链接:Promise 异步请求串行&并行执行实现
// 给定一个数组urls,里面保存着一组请求的url// 通过调用一个getResponse(url)方法// 发送异步请求。该方法返回值为一个promise。 const urls = ['url1', 'url2', 'url3', 'url4'];const getResponse = (url) => { return new Promise((resolve, reject) => { console.log('参数为:', url) setTimeout(() => { console.log('异步请求的结果来自:' + url); resolve(); }, 1000) })}// 并行urls.forEach(val => { getResponse(val);});// 串行(async () => { for (const url of urls) { await getResponse(url); } })()urls.reduce(async (pre, cur) => { await pre; await getResponse(cur);}, Promise.resolve());urls.reduce((pre, cur) => { return pre.then(() => { return Promise.resolve(getResponse(cur)); });}, Promise.resolve());
// fun为异步请求,经过retry包装后,// 首先执行fun,如果失败, 则每隔delay的时间尝试一次,// 直到成功,或者到达失败次数上限function retry(fun, delay, times) { let time = 0; return new Promise((resolve, reject) => { const again = () => { Promise.resolve(fun()) .then(resolve) .catch(() => { if (time >= times) { reject(); } else { setTimeout(() => { time++; again(); }, delay) } }) }; again(); });}