JS 2-5. Promise, Timeout, 타임아웃

강연주·2024년 11월 17일

🙋‍♀️ 기술면접

목록 보기
55/112

12. Promise를 사용해 함수의 타임아웃 기능을 구현할 때 사용하는 메서드

Promise를 사용, 함수의 타임아웃 기능 구현에는 Promise.race() 메서드가 효과적이다. Promise.race()는 전달받은 여러 개의 Promise 중
가장 먼저 완료된 Promise를 반환하므로, 이를 활용해 타임아웃 로직을 구현할 수 있다.

🖥️ javascript

function withTimeout(promise, timeout) {
  // 타임아웃 Promise 생성
  const timeoutPromise = new Promise((_, reject) =>
    setTimeout(() => reject(new Error('Operation timed out')), timeout)
  );

  // Promise.race로 가장 먼저 완료된 Promise 반환
  return Promise.race([promise, timeoutPromise]);
}

// 사용 예제
const myPromise = new Promise((resolve) => {
  setTimeout(() => resolve('Success!'), 3000); // 3초 후에 완료되는 Promise
});

withTimeout(myPromise, 2000) // 타임아웃을 2초로 설정
  .then((result) => console.log(result))
  .catch((error) => console.error(error.message)); // "Operation timed out"
  
  • Promise.race()
    여러 개의 Promise 중 가장 먼저 완료된 Promise가 결과를 결정한다.
    withTimeout 함수에서는 작업 Promise와 타임아웃 Promise를 동시에 실행한 후 가장 빠른 결과를 반환합니다.

  • 타임아웃 Promise
    setTimeout으로 타이머를 설정하고,
    시간이 초과되면 reject를 호출해 에러를 반환한다.

  • 유연한 시간 설정
    timeout 파라미터를 활용해 타임아웃 시간을 동적으로 조정할 수 있다.
    이 접근법은 비동기 작업의 시간이 너무 오래 걸릴 때,
    예외 처리와 제한 시간을 설정하는 데 유용하다.

profile
아무튼, 개발자

0개의 댓글