自定义Promise.all

239 阅读1分钟

# 自己写一个Promise.all方法

<script>
// 1.书写测试用例,定义三个Promise对象数据,并将他们放在一个数组arr里面
// 2.调用Promise.all方法
// 3.自定义Promise.all方法
//     3.1 promise.all方法返回的依然是一个Promise对象
//     3.2 循环arr数组里面的Promise,只有所有的Promise都返回的是对的才返回resolve 所有的结果数据resolveRes,否则返回reject err
Promise.all=function(arr){
    return new Promise((resolve,reject)=>{
        let resolveRes=[]
        for(let i=0;i<arr.length;i++){
            Promise.resolve(arr[i]).then(res=>{
                resolveRes[i]=res
                if(i==arr.length-1){
                    return resolve(resolveRes)
                }
            },err=>{
                return reject[err]
            }).catch(err=>{
                console.log(err)
            })
        }
    })
   
}


// test
let a=new Promise((resolve,reject)=>{
        resolve(1+1)
    
})
let b=new Promise((resolve,reject)=>{
        resolve(2+2)
})
let c=new Promise((resolve,reject)=>{
        resolve(3+3)
})

let arr=[a,b,c]
Promise.all(arr).then((res)=>{
    console.log(res)
}).catch((err)=>{
    console.log(err)
})
</script>