面试中遇到的题,补一补

ES6对promise.all的理解以及应用场景

用于将多个Promise实例,包装成一个新的Promise实例

let p1 = new Promise((reslove,reject)=>{
resolve("成功01")
})
let p2 = new Promise((reslove,reject)=>{
// resolve("成功02")
resolve("失败02")
}).catch(reason => console.log(reason))
let p3 = new Promise((reslove,reject)=>{
resolve("成功03")
resolve("失败03")
})
let pAll = Promise.all([p1,p2,p3])
console.log(pAll)
  • pAll的状态,由p1,p2,p3来决定,只有当这三个都为成功,pAll才会成功。
  • 但是如果有一个参数失败,那么就是失败,这个时候失败的实例的返回值,会传递给pAll的回调函数
  • 如果作为参数的实例,自己定义了catch的方法,那么他一定rejected,不会触发pAll的catch方法
    pAll.then((value) => {
    consloe.log(value)
    }).catch((reason)=>{
    console.log(reason)
    })

多个请求结构合并在一起

function getList1(){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve('数据1')
},1000)
})
}
function getList2(){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve('数据2')
},2000)
})
}
function getList3(){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve('数据3')
},3000)
})
}
function initLoad(){ //初始化数据
// 新的Promise实例 只有当这三个都为成功,All才会成功。
let All = Promise.all([getList1,getList2,getList3]);
// console.log(value)
// .then处理数据
All.then((value)=>{
console.log(value)
})
}
initLoad()

以上是我的学习笔记