Promise.all() 是 JavaScript 中用于处理多个并行异步操作的 Promise 方法,其核心作用是:将多个 Promise 实例包装成一个新的 Promise 实例,等待所有异步操作都成功完成后,统一返回所有结果;若其中任何一个操作失败,则立即返回失败原因。
具体特性:
- 参数:接收一个可迭代对象(通常是 Promise 数组)作为参数。
- 成功场景:当所有传入的 Promise 都变为
resolved状态时,Promise.all()返回的新 Promise 会变为resolved,并将所有结果按原顺序组成数组返回(即使某个 Promise 先完成,结果仍保持输入顺序)。 - 失败场景:只要有一个传入的 Promise 变为
rejected状态,Promise.all()会立即变为rejected,并返回第一个被拒绝的原因(其余未完成的 Promise 仍会执行,但结果会被忽略)。
示例代码:
// 模拟3个异步操作
const promise1 = Promise.resolve(1);
const promise2 = new Promise((resolve) => setTimeout(() => resolve(2), 1000));
const promise3 = fetch('https://api.example.com/data').then(res => res.json());
// 使用Promise.all()并行处理
Promise.all([promise1, promise2, promise3])
.then(results => {
// 所有操作成功:results为 [1, 2, 接口返回数据]
console.log('所有操作完成:', results);
})
.catch(error => {
// 若任何一个操作失败,立即执行这里
console.log('有操作失败:', error);
});
适用场景:
- 需要多个异步结果共同参与后续逻辑时(例如:同时获取用户信息、权限列表、配置数据,全部获取后再渲染页面)。
- 希望并行执行以提高效率(相比串行执行,减少总耗时)。
注意点:
- 若需要等待所有操作完成(无论成功或失败),可使用
Promise.allSettled()。 - 若只需获取第一个完成的结果(无论成功或失败),可使用
Promise.race()。