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