You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

带并发限制的并行Fetch请求实现方案

实现带并发限制的批量URL请求

你当前的代码通过Promise.all一次性发起所有URL请求,当URL数量超过20个时容易触发API限流。下面是修改后的代码,实现每次仅并发5个请求,完成一批后再执行下一批的逻辑:

async function getAllUrlsWithLimit(urls, limit = 5) {
  const results = [];
  
  // 按指定并发量分批处理URL
  for (let i = 0; i < urls.length; i += limit) {
    // 截取当前批次的URL
    const currentBatch = urls.slice(i, i + limit);
    
    // 并发处理当前批次的请求
    const batchResults = await Promise.all(
      currentBatch.map(url => 
        fetch(url)
          .then(response => response) // 可根据需求修改,比如response.json()
          .catch(err => {
            console.error(`请求 ${url} 失败:`, err);
            return null; // 保留失败标识,避免中断整个流程
          })
      )
    );
    
    results.push(...batchResults);
  }
  
  return results;
}

核心逻辑说明

  • 分批处理:通过for循环按limit(默认5)切割URL数组,每次处理一个批次
  • 批次内并发:每个批次内部用Promise.all同时发起请求,保证批次内的并发效率
  • 容错处理:单个请求添加catch捕获错误,避免某一个请求失败导致整个批次甚至整个任务中断
  • 灵活性:limit参数可自定义,方便根据API限流规则调整并发数

使用示例

// 假设urls是包含20+链接的数组
const urls = ['https://api.example.com/1', 'https://api.example.com/2', ...];
getAllUrlsWithLimit(urls, 5)
  .then(data => console.log('所有请求结果:', data))
  .catch(err => console.error('全局错误:', err));

内容的提问来源于stack exchange,提问作者cidodo7472

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 03:24:23