参考链接:Promise 异步请求串行&并行执行实现

    1. // 给定一个数组urls,里面保存着一组请求的url
    2. // 通过调用一个getResponse(url)方法
    3. // 发送异步请求。该方法返回值为一个promise。
    4. const urls = ['url1', 'url2', 'url3', 'url4'];
    5. const getResponse = (url) => {
    6. return new Promise((resolve, reject) => {
    7. console.log('参数为:', url)
    8. setTimeout(() => {
    9. console.log('异步请求的结果来自:' + url);
    10. resolve();
    11. }, 1000)
    12. })
    13. }
    14. // 并行
    15. urls.forEach(val => {
    16. getResponse(val);
    17. });
    18. // 串行
    19. (async () => {
    20. for (const url of urls) {
    21. await getResponse(url);
    22. }
    23. })()
    24. urls.reduce(async (pre, cur) => {
    25. await pre;
    26. await getResponse(cur);
    27. }, Promise.resolve());
    28. urls.reduce((pre, cur) => {
    29. return pre.then(() => {
    30. return Promise.resolve(getResponse(cur));
    31. });
    32. }, Promise.resolve());
    1. // fun为异步请求,经过retry包装后,
    2. // 首先执行fun,如果失败, 则每隔delay的时间尝试一次,
    3. // 直到成功,或者到达失败次数上限
    4. function retry(fun, delay, times) {
    5. let time = 0;
    6. return new Promise((resolve, reject) => {
    7. const again = () => {
    8. Promise.resolve(fun())
    9. .then(resolve)
    10. .catch(() => {
    11. if (time >= times) {
    12. reject();
    13. } else {
    14. setTimeout(() => {
    15. time++;
    16. again();
    17. }, delay)
    18. }
    19. })
    20. };
    21. again();
    22. });
    23. }