Promise.all用于并行执行多个独立异步请求,返回按输入顺序排列的结果数组,任一失败则立即拒绝;需注意错误兜底、并发限制及超时控制。

Promise.all 是 JavaScript 中处理多个异步请求并行执行的最常用、最高效的方式之一。它能显著减少总等待时间,前提是这些请求彼此独立、无需顺序依赖。
Promise.all 的核心机制
Promise.all 接收一个 Promise 实例数组,返回一个新的 Promise:
- 当所有输入 Promise 都成功(fulfilled)时,它以包含全部结果的数组形式 resolve;
- 只要其中任意一个被 reject,它就立即 reject,并返回第一个失败的原因(短路行为);
- 结果数组中元素的顺序严格对应传入数组的顺序,与实际完成先后无关。
基础用法示例
比如同时获取用户信息、订单列表和通知数:
const [user, orders, notifications] = await Promise.all([
fetch('/api/user').then(r => r.json()),
fetch('/api/orders').then(r => r.json()),
fetch('/api/notifications/count').then(r => r.json())
]);
// 三者并行发起,等待最慢的那个完成
错误处理不能只靠 try/catch
由于 Promise.all 遇错即停,若某个请求可能失败但又不想中断其余请求,可用以下方式兜底:
立即学习“Java免费学习笔记(深入)”;
- 对每个 Promise 做 .catch() 捕获错误并转为正常值(如 null 或默认对象);
- 或改用 Promise.allSettled(ES2020),它会等全部完成,返回每个 Promise 的 status 和 value/reason;
- 避免在未校验的情况下直接解构结果数组,防止因某项为 undefined 导致后续报错。
注意并发数量与服务端限制
一次性发起几十个请求虽技术可行,但易触发服务端限流或浏览器连接数限制(通常同域 6~10 个):
- 对大量数据分批处理,例如每 5 个一组调用 Promise.all;
- 结合 Promise.all + Promise.race 控制超时,防止个别请求拖垮整体响应;
- 后端接口支持批量查询时(如 /api/items?id=1,2,3),优先合并请求而非盲目并发。


















