当数组中的所有元素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出来

Promise.all 注意点_数组