【代码题】实现一个批量请求函数, 能够限制并发量?

41 阅读1分钟
async function batchRequest(urls, limit) {
  const results = [];
  const executing = [];

  for (const url of urls) {
    const request = fetch(url); // 假设使用fetch进行请求

    executing.push(request);

    if (executing.length >= limit) {
      await Promise.race(executing); // 等待最快完成的请求
      executing.splice(executing.indexOf(request), 1); // 移除已完成的请求
    }
  }

  // 等待剩余的请求全部完成
  await Promise.all(executing);

  for (const request of executing) {
    const response = await request;    const data = await response.json();
    results.push(data);
  }

  return results;
}
使用示例
const urls = [
  'https://api.example.com/data1',
  'https://api.example.com/data2',
  'https://api.example.com/data3',
  'https://api.example.com/data4',
  'https://api.example.com/data5'
];

const limit = 2; // 设置并发量为2

batchRequest(urls, limit)
  .then(results => {
    console.log(results);
  })
  .catch(error => {
    console.error(error);
  });