Promise.all()实现

47 阅读1分钟

1. 实现代码

function customPromiseAll(promises) {
    return new Promise((resolve, reject) => {
        // 处理空数组:立即 resolve 
        if (promises.length === 0) {
            resolve([]);
            return; // 提前返回,避免后续执行 
        }
        const results = [];
        let completedCount = 0;
        promises.forEach((promise, index) => {
            Promise.resolve(promise).then(
                value => {
                    results[index] = value;
                    completedCount++;
                    if (completedCount === promises.length) {
                        resolve(results);
                    }
                }).catch(error => {
                    reject(error);
                });
        });
    });
}
// 测试1:正常情况 
customPromiseAll([ 
    Promise.resolve(1), 
    Promise.resolve(2), 
    Promise.resolve(3) 
]).then(console.log); // [1, 2, 3] 
// 测试2:包含普通值 
customPromiseAll([1, 2, Promise.resolve(3)]).then(console.log); // [1, 2, 3] 
// 测试3:空数组 
customPromiseAll([]).then(console.log); // [] 
// 测试4:有一个失败 
customPromiseAll([Promise.resolve(1), Promise.reject('error')]) .catch(console.error); // 'error'