js实现Promise.all 解析Promise.all 和race

Promise.all 接收一个 promise 对象的数组,等所有都完成之后,统一执行success;

Promise.race 也接受一个 Promise 对象的数组,但是只要一个对象完成,就执行 success

示例:

let p1 = new Promise((resolve,reject) => {
    resolve('p1');
});

let p2 = new Promise((resolve,reject) => {
    resolve('p2');
})

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

// ['p1','p2']


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

// p1

使用 Promise 实现简单的 all

function promiseAll(promises) {
    return new Promise((resolve,reject) => {
        let count = 0;
        let len = promises.length;
        let res = new Array(len);

        for (let i=0;i<len;++i) {
            promises[i].then(value => {
                count ++;    
                res[i] = value;
            
                if (count === len) {
                    return  resolve(res);
                }
            }, error => {
                reject(error);
            })
        }
    })
}

猜你喜欢

转载自blog.csdn.net/RedaTao/article/details/107595746