首先我们创建两个promise
let p1 = new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve(1000)
},1000)
})
let p2 = new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve(2000)
},2000)
})
一个会在1s中后执行,一个会在两秒钟后执行。当我们使用promise.all方法的时候
Promise.all([p1,p2]).then(res=>{
console.log(res)
})
控制台会在两秒钟后返回给我们想要的值,因为promise.all方法会等待最后一个promise执行完成之后才会返还给我们值。
function myPromiseAll(lists){
return new Promise((resolve,reject)=>{
let resArr = []
let num = 0
lists.forEach(item=>{
item.then(res=>{
resArr.push(res)
num++
if(num===lists.length){
resolve(resArr)
}
})
})
})
}
myPromiseAll([p1,p2]).then(res=>{
console.log(res)
})
这就是原理了。