并行度由promise发起方式决定:for...of+await实现串行,promise.all实现全并行,promise.allsettled处理混合结果,分批或工具库可手动限并发。

await 本身不控制并行度,它只是暂停当前 async 函数执行;真正决定并行还是串行的,是你如何组织 Promise 的发起方式。关键在于:想快就并发发请求,想按序就逐个 await。
用 for...of 实现严格串行
适合前后依赖、需顺序执行或避免接口限流的场景。每次循环都等上一个异步操作完成再开始下一个。
- 直接在 for...of 循环体内写 await,无需额外包装
- 错误可统一用 try/catch 捕获,中断后续执行
- 示例:for (const id of ids) { const data = await fetch(`/api/item/${id}`).then(r => r.json()); console.log(data); }
用 Promise.all 实现全量并行
适合多个独立请求、无依赖关系、追求最短总耗时的场景。所有请求同时发出,总时间 ≈ 最慢那个。
- 先用 map 构造 Promise 数组,再 await Promise.all()
- 任一失败会导致整个 all 失败,如需容错,改用 Promise.allSettled()
- 示例:const promises = ids.map(id => fetch(`/api/item/${id}`).then(r => r.json())); const results = await Promise.all(promises);
用 Promise.allSettled 处理混合结果
当部分请求可能失败但你仍要拿到全部响应(成功或失败)时使用。
- 返回数组,每项含 status('fulfilled' 或 'rejected')和 value/reason
- 可过滤出成功项,或分别处理异常情况
- 示例:const results = await Promise.allSettled(promises); const fulfilled = results.filter(r => r.status === 'fulfilled').map(r => r.value);
手动限制并发数量(如最多 3 个同时请求)
既不想全串行太慢,又怕全并行触发服务端限流或内存压力。
- 把任务分批,每批用 Promise.all 并行,批间 await 等待
- 或用 async 队列工具(如 p-map 库),设置 concurrency 参数
- 手写简易版:切片 + reduce 链式执行批处理
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











