Promise批量请求函数

// 实现一个批量请求函数 multiRequest(urls, maxNum)

  // 要求:

  // 要求最大并发数 maxNum
  // 每当有一个请求返回,就留下一个空位,可以增加新的请求
  // 所有请求完成后,结果按照 urls 里面的顺序依次打出
  let a = "https://dog.ceo/api/breeds/image/random";
  let b = "https://dog.ceo/api/breeds/image/random";
  let c = "https://dog.ceo/api/breeds/image/random";
  let d = "https://dog.ceo/api/breeds/image/random";
  let e = "https://dog.ceo/api/breeds/list";
  let f = "https://dog.ceo/api/breeds/image/random";
  let g = "https://dog.ceo/api/breeds/image/random";
  let h = "https://dog.ceo/api/breeds/image/random";
  let i = "https://dog.ceo/api/breeds/image/random";
  let q = "https://dog.ceo/api/breeds/list";

  let urls = [a, b, c, d, e, f, g, h, i, q];


  const multiRequest = (urls, maxNum) => {
    return new Promise((resolve, reject) => {
      // 记录当前请求数,全部完成后返还
      let count = 0;
      // 记录请求队列长度
      let lens = urls.length;
      // 内部执行队列
      let dqueue = [];
      let i = 0;
      while (i < maxNum) {
        dqueue.push(urls[i]);
        i++;
      }

      // 内部队列,保存结果
      let queue = [];
      let index = 0;
      while (index < dqueue.length) {
        fetch(dqueue[index])
          .then((res) => {
            queue.push(res);
            count++;
          })
          .then((res) => {
            if (dqueue.length < lens) {
              dqueue.push(urls[count + maxNum - 1]);
              fetch(dqueue[count + maxNum - 1])
                .then((res) => {
                  queue.push(res);
                  count++;
                })
                .then((res) => {
                  if (count === lens) {
                    resolve(queue);
                  }
                });
            }
            if (count === lens) {
              resolve(queue);
            }
          });
        index++;
      }
    });
  };

  multiRequest(urls, 5).then((res) => {
    console.log(res);
  });
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。