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

如何实现API的3个并发请求:完成即补位的最优方案?

维持固定并发数处理API请求的最佳实现方式

你的当前代码是将产品分成每组3个,等待整组全部完成后再处理下一组,这会导致两组之间出现并发空窗期,无法做到"完成一个就立即补上一个"的效果。以下是实现固定3个并发请求的最优方案:

核心思路:使用Worker Pool(工作池)

创建3个异步工作函数,每个函数持续从任务队列中取出产品调用API,直到队列清空。这样就能始终保持最多3个并发请求,一个完成后立刻启动下一个。

改进后的代码

const productsQuery = await getAllProducts();
const allProducts = productsQuery.rows;
const concurrencyLimit = 3;

// 创建任务队列(复制原数组避免修改原数据)
const taskQueue = [...allProducts];

// 定义工作函数:持续从队列取任务执行
async function processTask() {
  while (taskQueue.length > 0) {
    const product = taskQueue.shift();
    try {
      await callCustomAPI(product);
      // 可选:处理成功后的逻辑,比如记录日志
    } catch (error) {
      // 可选:处理请求失败的情况,比如重试或记录错误
      console.error(`处理产品${product.id}失败:`, error);
    }
  }
}

// 启动3个工作函数,等待所有任务完成
await Promise.all(Array.from({ length: concurrencyLimit }, processTask));

代码说明

  • 任务队列:将所有待处理的产品放入队列,shift()方法每次取出队列头部的产品(先进先出),JavaScript单线程特性保证该操作不会出现竞争问题。
  • 工作函数:每个工作函数循环从队列取任务,直到队列为空,完成一个请求后立即启动下一个,无缝填补并发空位。
  • 并发控制:通过启动3个工作函数,严格维持最多3个API请求同时运行。
  • 错误处理:try/catch块避免单个请求失败导致整个工作线程终止,保证其他任务能继续执行。

对比原代码的优势

  • 原代码是批量等待:必须等一组3个请求全部完成才会开始下一组,中间存在空闲时间。
  • 新代码是持续并发:始终维持3个请求在运行,直到所有任务处理完毕,效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 20:27:48