自定义实现promise.all

发布时间 2023-09-21 16:53:15作者: 流弊的小涛

Promise.all是一个在JavaScript中常见的函数,用于处理一个Promise数组。当数组中的所有Promise都完成时,Promise.all将返回一个新的Promise,该Promise将解析为包含所有输入Promise解析值的数组。如果任何一个Promise失败,返回的Promise将立即被标记为失败,并且该数组将只包含失败的Promise的错误。

function myPromiseAll(promiseArray) {  
    return new Promise((resolve, reject) => {  
        let results = [];  
  
        let promiseIndex = 0;  
        function checkPromise() {  
            if (promiseIndex >= promiseArray.length) {  
                // 所有Promise都已完成,可以解析结果并解决  
                resolve(results);  
                return;  
            }  
  
            let currentPromise = promiseArray[promiseIndex];  
            currentPromise.then(  
                (result) => {  
                    results[promiseIndex] = result;  
                    promiseIndex++;  
                    checkPromise();  
                },  
                (error) => {  
                    reject(error);  
                }  
            );  
        }  
  
        checkPromise();  
    });  
}

这个函数接受一个Promise数组作为输入,并返回一个新的Promise。这个新的Promise将在所有输入Promise都完成时解析,或者在任何一个Promise失败时标记为失败。这个函数使用一个数组来跟踪每个Promise的结果,并使用一个索引来跟踪我们还需要多少个Promise才能完成。然后,我们递归地调用checkPromise函数,直到所有的Promise都完成。