Promise.race
를 써보기 좋은 예제이다.
물론 Promise를 하나 등록해서, 해당 Promise 내부에 setTimeout을 통한 reject도 가능하겠지만 코드가 복잡해진다.
type Fn = (...params: any[]) => Promise<any>;
function timeLimit(fn: Fn, t: number): Fn {
return async function(...args) {
// 타임아웃 시, reject될 Promise 선언
const comparePromise = new Promise((_, reject) => setTimeout(() => reject("Time Limit Exceeded"), t))
// 두 Promise 중 우선 완료되는 것을 실행
return Promise.race([fn(...args), comparePromise])
}
};