当数组中的所有元素resolve才会 返回结果,
let p1 = new Promise((resolve, reject) => {
resolve(123)
console.log(123)
})
let p2 = new Promise((resolve, reject) => {
})
let p3 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve(3000)
}, 3000);
})
const r = Promise.all([p1, p2, p3]).then((r) => {
console.log(r);
console.log(‘end’);
})
console.log(r);
这段代码 r的状态永远是pending , 永远不会输出 end
let p1 = new Promise((resolve, reject) => {
console.log(1)
resolve(1)
})
let p2 = new Promise((resolve, reject) => {
console.log(2)
resolve(2)
})
let p3 = new Promise((resolve, reject) => {
console.log(3)
resolve(3)
})
const r = Promise.all([p1, p2, p3]).then((r) => {
console.log(r);
})
// 提问 这段代码输出什么?
A: 1 2 3 [1,2,3]
B: 1 2 3 1 2 3 [1,2,3]
答案是a,代码向下执行,执行到const r那一行时,三个promise里的构造函数都已经执行完了,此时他们都是pending的状态。
向下执行all方法,all方法实现是遍历[p,p,p,p] 数组执行p对象的then方法,并记录num,如果num等于数组长度的话,把结果数组resolve出来