前端面试题手写promise.all()

289 阅读1分钟

promise.all()

  1. promise.all()是promise的一个静态方法,将多个promise实例合并成一个promise实例,并且返回所有promise的resolve结果并以数组的方式呈现出来,但是如果输入的promise中有reject回调,则会报错,必须保证输入的promise的状态都是resolve,
 // 手写promise.all方法
        let p1 = new Promise((res,rej)=>{
            setTimeout(()=>{
                res('你好哇')
            },1000)
        })
        let p2 = new Promise((res,rej)=>{
            setTimeout(()=>{
                res('李银河')
            },2000)
        })
        Promise.all([p1,p2]).then(res=>{
            console.log(res)
        })
         function myPromiseAll(lists){
             return new Promise((resolve,reject)=>{
                 //定义一个数组,将所有promise的结果都放在这个数组中
               let myArr = []
                 //定义一个计数器,
                 let num = 0;
                 lists.forEach((item,index)=>{
                     item.then(res=>{
                         //不使用push防止最后结果和传入结果的顺序不一致
                         myArr[index] = res;
                        // myArr.push(res)
                         num ++;
                         if(num == lists.length){
                         resolve(myArr)
                     }
                     })
                    
                 })
         myPromiseAll([p1,p2]).then(res=>{
             console.log(res)
         })