如何手动实现promise.all方法

127 阅读1分钟

如何手撕promise.all方法

具体实现请看下方代码


function promiseAll(promiseArray){
    return new Promise( (resolve, reject) => {
        if(!Array.isArray(promiseArray)){
            reject("参数类型错误")
        }

        let promiseResults = [];
        let count = 0;
        for(let i = 0; i < promiseArray.length; i++){
            Promise.resolve(promiseArray[i]).then((item) => {
                promiseResults[i] = item;
                count++;
                if(count === promiseArray.length){
                    resolve(promiseResults);
                }
            }).catch(err => {
                reject(err);
            });
        }
    })
}



const p1 = new Promise((res, rej) => {
    setTimeout(() => {
        res('p1')
    }, 1000)
})

const p2 = new Promise((res, rej) => {
    setTimeout(() => {
        res('p2')
    }, 2000)
})

const p3 = new Promise((res, rej) => {
    setTimeout(() => {
        res('p3')
    }, 3000)
})

const test = promiseAll([p1, p2, p3])
    .then(res => console.log(res))
    .catch(e => console.log(e))

console.log(test);