Skip to content

promiseLimit

限制并发 Promise 数量,控制同时执行的异步任务数。

函数签名

typescript
function promiseLimit<T>(
  tasks: Array<() => Promise<T>>,
  limit: number
): Promise<T[]>

参数

参数名类型必填说明
tasksArray<() => Promise<T>>Promise 工厂函数数组
limitnumber最大并发数

返回值

类型说明
Promise<T[]>Promise,解析为所有任务结果的数组(保持顺序)

工作原理

  1. 初始化

    • 创建结果数组(预分配长度)
    • 初始化任务索引计数器
  2. 执行器函数

    • 检查是否还有待执行的任务
    • 获取下一个任务索引
    • 执行任务并等待完成
    • 将结果存储到对应索引位置
    • 递归调用执行器(处理下一个任务)
  3. 启动并发

    • 创建 limit 个执行器实例
    • 同时启动这些执行器
    • 每个执行器完成一个任务后,自动开始下一个
  4. 等待所有完成

    • 使用 Promise.all 等待所有执行器完成
    • 返回结果数组(按原始任务顺序)

示例

typescript
const tasks = Array.from({ length: 10 }, (_, i) => 
  () => fetch(`/api/data/${i}`)
)

// 最多同时执行 3 个请求
const results = await promiseLimit(tasks, 3)

通过控制并发数,避免同时发起大量请求导致的性能问题或API限流。