ES6中的Promise.all
是一个静态方法,用于处理多个Promise
对象的并行执行。它接受一个Promise
对象的数组作为参数,并返回一个新的Promise
对象。
Promise.all
会等待所有的Promise
对象都变为resolved
状态后才会返回,返回的Promise
对象的resolve
回调函数的参数是一个数组,包含了所有Promise
对象的结果。如果其中任何一个Promise
对象变为rejected
状态,则返回的Promise
对象的reject
回调函数会被立即调用,并传递第一个被rejected
的Promise
对象的错误信息。
示例代码如下:
const promise1 = Promise.resolve(3);
const promise2 = 42;
const promise3 = new Promise((resolve, reject) => {
setTimeout(resolve, 100, 'foo');
});
Promise.all([promise1, promise2, promise3])
.then(values => {
console.log(values); // [3, 42, 'foo']
})
.catch(error => {
console.error(error);
});
在上面的例子中,promise1
和promise2
分别是已经被resolved
的Promise
对象,而promise3
是一个在100ms后变为resolved
状态的Promise
对象。Promise.all
会等待所有的Promise
对象都变为resolved
状态后,返回一个新的Promise
对象,并将所有结果以数组的形式传递给resolve
回调函数。在这个例子中,values
数组包含了promise1
、promise2
和promise3
的结果,即[3, 42, 'foo']
。
如果其中任何一个Promise
对象变为rejected
状态,如下所示:
const promise1 = Promise.resolve(3);
const promise2 = 42;
const promise3 = new Promise((resolve, reject) => {
setTimeout(reject, 100, 'Error');
});
Promise.all([promise1, promise2, promise3])
.then(values => {
console.log(values);
})
.catch(error => {
console.error(error); // Error
});
在这个例子中,promise3
在100ms后变为rejected
状态,Promise.all
会立即返回一个新的Promise
对象,并将promise3
的错误信息传递给reject
回调函数。因此,只会执行catch
回调函数,并输出Error
。