1 解释
Promise.all()方法接收一个由promise组成的iterable类型参数(Array,Map,Set 都属于 ES6 的 iterable 类型)。
- 如果所有输入的promise的resolve回调都结束了,或者输入的iterable里面没有promise了的时候,这个Promise执行resolve回调函数,回调结果是所有promise的resolve回调组成的数组。
- 如果任何一个输入的promise的reject回调执行,或者输入不合法的promise,就会立即抛出错误,并且reject的是第一个抛出的错误。
2 使用场景
某个操作同时需要不同的接口返回的数据,这时我们就可以使用Promise.all。
3 示例
成功执行的例子:
const promise1 = Promise.resolve(3);
const promise2 = 42;
const promise3 = new Promise((resolve, reject) => {
setTimeout(resolve, 1000, 'foo');
});
Promise.all([promise1, promise2, promise3]).then((values) => {
console.log(values);
});
// expected output: Array [3, 42, "foo"]
执行失败的例子:
const promise1 = Promise.resolve(3);
const promise2 = 42;
const promise3 = new Promise((resolve, reject) => {
setTimeout(reject, 1000, 'foo');
});
Promise.all([promise1, promise2, promise3]).then((values) => {
console.log(values);
}).catch((err) => {
console.log("error occur");
});
// expected output: error occur