📅  最后修改于: 2023-12-03 14:42:26.586000             🧑  作者: Mango
在 JavaScript 中,Promise.all() 是一个非常有用的方法,可用于并行执行多个 Promise 对象,并在所有 Promise 都成功解决后返回一个结果。
Promise.all(iterable);
iterable
: 一个可迭代的对象,通常是一个数组或类数组对象,其中包含多个 Promise 对象。返回一个新的 Promise 对象,该 Promise 对象将以一个数组的形式解决,其中包含传入的所有 Promise 对象解决时的结果。如果传入的任何一个 Promise 对象失败,Promise.all() 将立即将结果设置为回调拒绝的原因,并将异常传递给前端。
const promise1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('第一个 Promise');
}, 1000);
});
const promise2 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('第二个 Promise');
}, 2000);
});
const promise3 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('第三个 Promise');
}, 1500);
});
Promise.all([promise1, promise2, promise3])
.then((results) => {
console.log(results);
})
.catch((error) => {
console.error(error);
});
在上面的示例中,我们创建了三个 Promise 对象,每个对象都是通过 setTimeout 函数模拟一个异步操作。然后,我们使用 Promise.all() 方法并传入这三个 Promise 对象的数组。当所有 Promise 都成功解决时,我们可以通过 .then()
方法获取解决的结果,由于 promise1
被设置为 1 秒后解决,promise2
被设置为 2 秒后解决,promise3
被设置为 1.5 秒后解决,所以结果数组的顺序将按照 Promise 对象的传入顺序进行排序。
输出结果将为:
[ '第一个 Promise', '第二个 Promise', '第三个 Promise' ]
如果其中一个 Promise 对象被拒绝,则 Promise.all() 将被立即拒绝,并传递拒绝的原因给 .catch()
方法,从而使我们能够捕获并处理异常情况。
Promise.all() 方法允许我们同时处理多个 Promise 对象,并在它们都成功解决后返回一个数组的结果。这种并行执行可以有效地提高程序的性能和效率。注意,如果其中一个 Promise 对象被拒绝,整个 Promise.all() 将被拒绝,因此要确保正确处理异常情况。