Promise All

Promise All - Explanation

어려움 비동기 O(n) O(n)

Problem Summary

Implement a simplified version of Promise.all.

Go to Problem →

Detailed Explanation

이 문제는 **Promise.all**의 동작 원리를 이해하고 직접 구현하는 방법을 학습합니다. ## 핵심 개념: Promise.all 모든 Promise가 완료될 때까지 기다린 후 결과 배열을 반환합니다. ### 동작 방식 1. 모든 Promise가 성공 → 결과 배열 반환 2. 하나라도 실패 → 즉시 reject ### 구현 분석 ```javascript return new Promise((resolve, reject) => { const results = []; let completed = 0; promises.forEach((p, i) => { Promise.resolve(p).then(value => { results[i] = value; // 순서 유지! completed++; if (completed === promises.length) resolve(results); }).catch(reject); }); }); ``` ### 주요 포인트 - `results[i]`로 순서 유지 - `Promise.resolve(p)`로 비Promise 값 처리 - 완료 카운터로 모든 완료 확인 ### 실무 활용 ```javascript const [user, posts] = await Promise.all([ fetchUser(id), fetchPosts(id) ]); ``` 병렬 처리로 성능을 최적화할 수 있습니다.

Solution Code

solution.js
function promiseAll(promises) {
  return new Promise((resolve, reject) => {
    const results = [];
    let completed = 0;
    if (promises.length === 0) resolve(results);
    promises.forEach((p, i) => {
      Promise.resolve(p).then(value => {
        results[i] = value;
        completed++;
        if (completed === promises.length) resolve(results);
      }).catch(reject);
    });
  });
}

Key Concepts from This Problem

1. Promise.all
2. 병렬 처리
3. Promise 생성
4. 순서 유지

Common Mistakes

결과 순서는 입력 순서와 같아야 합니다 (완료 순서 X)
빈 배열은 즉시 resolve해야 합니다
비Promise 값도 처리해야 합니다 (Promise.resolve 사용)

Hints

Hint 1: 모든 Promise가 완료될 때까지 기다리세요.
Hint 2: 하나라도 실패하면 reject하세요.

Complexity Analysis

Time Complexity

O(n)

Grows linearly with input size

Space Complexity

O(n)

Uses memory proportional to input size

Related Tags

#비동기 #Promise #all