promiseLimit
限制并发 Promise 数量,控制同时执行的异步任务数。
函数签名
typescript
function promiseLimit<T>(
tasks: Array<() => Promise<T>>,
limit: number
): Promise<T[]>参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
tasks | Array<() => Promise<T>> | 是 | Promise 工厂函数数组 |
limit | number | 是 | 最大并发数 |
返回值
| 类型 | 说明 |
|---|---|
Promise<T[]> | Promise,解析为所有任务结果的数组(保持顺序) |
工作原理
初始化:
- 创建结果数组(预分配长度)
- 初始化任务索引计数器
执行器函数:
- 检查是否还有待执行的任务
- 获取下一个任务索引
- 执行任务并等待完成
- 将结果存储到对应索引位置
- 递归调用执行器(处理下一个任务)
启动并发:
- 创建 limit 个执行器实例
- 同时启动这些执行器
- 每个执行器完成一个任务后,自动开始下一个
等待所有完成:
- 使用
Promise.all等待所有执行器完成 - 返回结果数组(按原始任务顺序)
- 使用
示例:
typescript
const tasks = Array.from({ length: 10 }, (_, i) =>
() => fetch(`/api/data/${i}`)
)
// 最多同时执行 3 个请求
const results = await promiseLimit(tasks, 3)通过控制并发数,避免同时发起大量请求导致的性能问题或API限流。