根据最大并发数实现并发请求

function concurrencyFetch(urls, maxNum) {
  if (urls.length == 0) {
    return Promise.resolve([])
  }

  let index = 0;
  let result = [];
  return new Promise((resolve) => {
    async function _request() {

      let i = index;
      let url = urls[index]
      index++;
      try {
        let res = await fetch(url)
        result[i] = res;

      } catch (error) {
        result[i] = error;
      } finally {

        console.log(i, urls.length, 'xx')
        if (index == urls.length) {
          resolve(result);
        }
        if (index < urls.length) {
          _request()
        }

      }
    }

    for (let i = 0; i < maxNum; i++) {
      _request();
    }
  })

}

const urls = ['https://jsonplaceholder.typicode.com/todos/1', 'https://jsonplaceholder.typicode.com/todos/2', 'https://jsonplaceholder.typicode.com/todos/3']



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

推荐阅读更多精彩内容