Promise with Timeout

Promise with Timeout - Explanation

보통 비동기 O(1) O(1)

Problem Summary

Write a function that wraps a promise with a timeout.

Go to Problem →

Detailed Explanation

이 문제는 **Promise.race**를 활용하여 타임아웃을 구현하는 방법을 학습합니다. ## 핵심 개념: Promise 타임아웃 지정된 시간 내에 완료되지 않으면 실패 처리합니다. ### 구현 ```javascript function withTimeout(promise, ms) { const timeout = new Promise((_, reject) => setTimeout(() => reject(new Error('Timeout')), ms) ); return Promise.race([promise, timeout]); } ``` ### 동작 원리 1. 타임아웃 Promise 생성 (ms 후 reject) 2. Promise.race로 경쟁 3. 원래 Promise가 먼저 완료 → 성공 4. 타임아웃이 먼저 → 실패 ### 시각화 ``` 원본: ----완료----> 타임아웃: --X (reject)--> race: 타임아웃이 먼저 → Error('Timeout') ``` ### 실무 활용 ```javascript try { const data = await withTimeout(fetch(url), 5000); } catch (e) { if (e.message === 'Timeout') { console.log('요청 시간 초과'); } } ``` 타임아웃은 네트워크 요청에서 필수적인 패턴입니다.

Solution Code

solution.js
function withTimeout(promise, ms) {
  const timeout = new Promise((_, reject) =>
    setTimeout(() => reject(new Error('Timeout')), ms)
  );
  return Promise.race([promise, timeout]);
}

Key Concepts from This Problem

1. Promise 타임아웃
2. Promise.race
3. setTimeout
4. 에러 처리

Common Mistakes

타임아웃 후에도 원래 Promise는 계속 실행됩니다 (취소 불가)
AbortController로 실제 취소가 필요할 수 있습니다
타임아웃 에러와 다른 에러를 구분해야 합니다

Hints

Hint 1: Promise.race로 원래 promise와 타임아웃을 경쟁시키세요.

Complexity Analysis

Time Complexity

O(1)

Constant time regardless of input size

Space Complexity

O(1)

Uses almost no additional memory

Related Tags

#비동기 #Promise #timeout