实现 Promise.all

Promise.all 允许定义的 Promise 按照数组传入,并依次执行 Promise 并将结果保存在一个列表中,返回一个Promise.

let p1 = new Promise((resolve, reject)=>{
    resolve("只要有爱,");
});

let p2 = new Promise((resolve, reject)=>{
    resolve("在哪里都是天堂!")
});

let p3 = Promise.reject("不要让恨遮蔽了双眼!");

Promise.all([p1, p2]).then(res=>{
    console.log(res)
})

Promise.all([p1, p2, p3]).then(res=>{
    console.log(res);
}).catch(err=>{
    console.log(err);
})

// output
// [ '只要有爱,', '在哪里都是天堂!' ]
// 不要让恨遮蔽了双眼!
Promise.myAll = function(promises){
    return new Promise((resolve, reject)=>{
        let res = [];
        promises.forEach((promise, index)=>{
            promise.then(data=>{
                res.push(data);
                if(index===promises.length-1){
                    resolve(res);
                }
            }).catch(err=>{
                reject(err);
            })
        });
    })
}

Promise.myAll([p1, p2]).then(res=>{
    console.log(res)
})

Promise.myAll([p1, p2, p3]).then(res=>{
    console.log(res);
}).catch(err=>{
    console.log(err);
})

 

posted @ 2020-05-28 10:48  apple78  阅读(173)  评论(0)    收藏  举报