文章目录
前言
前面我们简单实现了一个promise,不懂的同学,传送门:深入透析Promise
那么,除了它本身意外,我们用的最多的恐怕就是all、race方法了吧?
什么?你不知道是啥?别担心,下面让我们一起探探究竟吧!
一、Promise.all()
1.介绍
官方介绍:Promise.all()方法用于将多个 Promise 实例,包装成一个新的 Promise 实例。
例如:
// 注意!方法的入参必须是一个可迭代器(iterable),比如数组。
const p = Promise.all([p1, p2, p3]);
Promise.all(iterable) 方法返回一个 Promise 实例,此实例在 iterable 参数内所有的 promise 都“完成(resolved)”或参数中不包含 promise 时回调完成(resolve);如果参数中 promise 有一个失败(rejected),此实例回调失败(reject),失败原因的是第一个失败 promise 的结果
步骤可简化为:
- 只有p1、p2、p3的状态都变成fulfilled,p的状态才会变成fulfilled,此时p1、p2、p3的返回值组成一个数组,传递给p的回调函数。
- 只要p1、p2、p3之中有一个被rejected,p的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。
2.实例
状态全为fulfilled
//0.5s后转化为fulfilled状态
let p1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("p1");
}, 1000);
});
//直接转化为fulfilled状态
let p2 = new Promise((resolve, reject) => {
resolve("p2");
});
Promise.all([p1, p2])
.then((res) => {
console.log(res);
})
.catch((err) => {
console.log(err);
});