Promise.all 详解
1. 什么是 Promise.all?
Promise.all
是 JavaScript 中 Promise
对象的一个静态方法,用于并行执行多个异步操作,并在所有操作都完成后得到结果。
它接受一个可迭代对象(通常是数组)作为参数,数组中包含多个 Promise 实例,返回一个新的 Promise。
Promise.all(iterable);
- 参数:
iterable
是一个可迭代对象(如数组),其中的每个元素都是一个 Promise 或者非 Promise 值。 - 返回值:返回一个新的 Promise。
2. 工作原理
Promise.all
会等待传入的所有 Promise 都变成 fulfilled(成功),然后返回一个新的 Promise,该 Promise 的状态变为 fulfilled,且返回一个数组,数组中包含所有 Promise 的结果,顺序与传入的 Promise 顺序一致。- 如果传入的任意一个 Promise 变为 rejected(失败),
Promise.all
返回的 Promise 会立即变为 rejected,且失败原因就是第一个失败的 Promise 的原因,后续的 Promise 结果会被忽略。
const a1 = Promise.resolve(1);
const a2 = new Promise((resolve) => setTimeout(() => resolve(2), 1000));
const a3 = Promise.resolve(3);
Promise.all([a1, a2, a3]) .then(results => {
console.log(results);
// [1, 2, 3]
}) .catch(error => { console.error('有一个Promise失败了:', error); });