Promise Time Limit
Medium
Solution
setTimeout
export function timeLimit<P, R>(fn: (...params: P[]) => Promise<R>, t: number) {
return (...args: P[]) => {
return new Promise((resolve, reject) => {
const timeout = setTimeout(() => {
reject('Time Limit Exceeded');
}, t);
fn(...args)
.then(resolve)
.catch(reject)
.finally(() => {
clearTimeout(timeout);
});
});
};
}
Promise.race
export function timeLimit2<P, R>(fn: (...params: P[]) => Promise<R>, t: number) {
const timeout = (ms: number) =>
new Promise((_, reject) => {
setTimeout(() => {
reject('Time Limit Exceeded');
}, ms);
});
return (...args: P[]) => {
return Promise.race([fn(...args), timeout(t)]);
};
}