promise.all用于并行执行多个promise并等待全部完成,任一失败则立即拒绝,全部成功才返回按输入顺序排列的结果数组;需确保传入的是已调用的promise实例,否则可能静默失败。

Promise.all 用于并行执行多个 Promise,并等待它们全部完成。只要有一个失败,就立刻拒绝;全部成功才返回结果数组。
基本用法:传入 Promise 数组
Promise.all 接收一个可迭代对象(通常是数组),里面每个元素都应是 Promise 实例。它返回一个新的 Promise:
- 全部 fulfilled → 新 Promise 变为 fulfilled,值是按顺序排列的结果数组
- 任意一个 rejected → 新 Promise 立刻变为 rejected,值是第一个被拒绝的错误
示例:
const p1 = Promise.resolve(1);const p2 = Promise.resolve(2);
const p3 = Promise.reject("出错了");
Promise.all([p1, p2, p3])
.catch(err => console.log(err)); // "出错了"
注意返回结果的顺序,和输入顺序一致
即使某个 Promise 执行得慢,它的结果仍会放在原位置。不会因为快慢影响数组索引:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
const fast = Promise.resolve("快");
Promise.all([slow, fast])
.then(res => console.log(res)); // ["慢", "快"]
处理部分失败:用 Promise.allSettled 替代
如果希望不管成功失败都等所有 Promise 结束,用 Promise.allSettled:
- 返回一个数组,每个元素包含 status("fulfilled" 或 "rejected")和 value 或 reason
- 适合需要汇总所有请求状态的场景,比如批量上传、多接口探测
Promise.resolve(1),
Promise.reject("失败")
]).then(results => {
console.log(results);
// [{status: "fulfilled", value: 1}, {status: "rejected", reason: "失败"}]
});
常见陷阱:确保传入的是 Promise
如果数组里有非 Promise 值(如数字、字符串),Promise.all 会自动用 Promise.resolve 包装它:
Promise.all([1, Promise.resolve(2), Promise.reject(3)]).catch(e => console.log(e)); // 3
但要注意:若误传函数而非调用后的 Promise,会导致静默失败或类型错误:
- ❌
Promise.all([fetchData])—— fetchData 是函数,不是 Promise - ✅
Promise.all([fetchData()])—— 调用后返回 Promise
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










