Promise.all并发执行所有Promise并等待全部完成:全成功则以数组形式返回结果(顺序一致),任一失败则立即拒绝并返回首个错误;需传入已执行的Promise实例而非函数;部分失败场景应使用Promise.allSettled。

Promise.all 是 JavaScript 中用于并发执行多个 Promise 并等待它们全部完成的工具方法。它不会“串行”执行,而是让所有异步任务同时启动,然后统一等待全部 resolve(或任一 reject)。
Promise.all 的基本用法
它接收一个 Promise 实例数组作为参数,返回一个新的 Promise:
- 如果所有 Promise 都成功(resolve),新 Promise 以包含所有结果的数组形式 fulfilled,顺序与输入数组一致;
- 只要有一个 Promise 失败(reject),新 Promise 立即 rejected,值为第一个失败的错误,其余仍在运行但结果被忽略。
示例:
const p1 = fetch('/api/users').then(res => res.json());
const p2 = fetch('/api/posts').then(res => res.json());
const p3 = new Promise(resolve => setTimeout(() => resolve('done'), 100));
Promise.all([p1, p2, p3])
.then(([users, posts, msg]) => {
console.log(users, posts, msg); // 按顺序解构
})
.catch(err => {
console.error('其中一个失败了:', err);
});
注意:所有 Promise 必须“已创建”,不是“函数”
常见错误是把异步函数(如 () => fetch(...))直接放进数组 —— 这样 Promise 不会自动执行。Promise.all 要的是“正在运行的 Promise 实例”:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
- ✅ 正确:提前调用函数生成 Promise,再传入数组;
- ❌ 错误:
Promise.all([() => fetch(...), () => fetch(...)])—— 数组里全是函数,不是 Promise。
处理部分失败:用 Promise.allSettled 替代
如果希望无论成功失败都等所有结果(比如批量上传、日志上报),改用 Promise.allSettled:
- 它返回一个对象数组,每个对象含
status("fulfilled" 或 "rejected")和value或reason; - 不会因某个失败而中断,适合容错场景。
控制并发数量(避免请求过多)
Promise.all 默认全量并发,可能触发接口限流或内存压力。如需限制同时最多 3 个请求,可用分批 + 递归或第三方库(如 p-limit),例如:
async function limitConcurrency(promises, limit = 3) {
const results = [];
for (let i = 0; i < promises.length; i += limit) {
const batch = promises.slice(i, i + limit);
results.push(...await Promise.all(batch));
}
return results;
}

















