[LeetCode] 2721. Execute Asynchronous Functions in Parallel

Chobby·2024년 7월 9일
1

LeetCode

목록 보기
33/194

Promise.all을 사용하게 되면, 전체 함수를 실행하고 나온 결괏값 Promise만 할당해주면 해결될 문제이지만 구현해보는것이 목적

type Fn<T> = () => Promise<T>

function promiseAll<T>(functions: Fn<T>[]): Promise<T[]> {
    // 결과를 저장할 배열을 초기화합니다.
    const results: T[] = [];
    // 완료된 프로미스 수를 추적합니다.
    let completedPromises = 0;

    // 새로운 프로미스를 반환합니다.
    return new Promise<T[]>((resolve, reject) => {
        // 입력 배열의 길이가 0인 경우, 빈 배열로 즉시 resolve 합니다.
        if (functions.length === 0) {
            resolve([]);
            return;
        }

        // 각 함수에 대해 반복합니다.
        functions.forEach((func, index) => {
            // 함수를 실행하고 반환된 프로미스를 처리합니다.
            func()
                .then((value) => {
                    // 결과를 해당 인덱스에 저장합니다.
                    results[index] = value;
                    completedPromises++;

                    // 모든 프로미스가 완료되었는지 확인합니다.
                    if (completedPromises === functions.length) {
                        resolve(results);
                    }
                })
                .catch((error) => {
                    // 에러가 발생하면 즉시 reject 합니다.
                    reject(error);
                });
        });
    });
}
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글