实现Promise.all用法

Promise.all([p1,p2,p3]) 以数组的形式传入每个promise实例,返回一个新的promise对象
每个实例的结果均为resolve时,将结果推入数组中,并resolve出来。
有一个实例的结果为reject时,就reject出来
Promise.all方法的参数可以不是数组,但必须具有 Iterator 接口,且返回的每个成员都是 Promise 实例。


Promise.all = promises => {
    return new Promise((resolve,reject) => {
        if(typeof promises[Symbol.iterator] != 'function' ){
            reject('类型错误')
        }
        if(promises.length == 0){
            reject([])
        }else{
            const targetArr = []
            const len = promises.length
            const index = 0
            for(let i = 0;i<len;i++){
                //通过Promise.resolve方法得到每个promise实例的结果
                Promise.resolve(promises[i]).then(value => {
                    index++;
                    targetArr[i] = value
                    if(index == len){
                        resolve(targetArr)
                    }
                }).catch(err => {
                    reject(err)
                })
            }
        }
    })
}

猜你喜欢

转载自blog.csdn.net/qq_43004614/article/details/91467412