export function withTimeout<T>(p: Promise<T>, ms: number, label = 'operation'): Promise<T> {
let timer: ReturnType<typeof setTimeout>;
const timeout = new Promise<never>((_, reject) => {
timer = setTimeout(() => reject(new Error(`${label} timed out after ${ms}ms`)), ms);
});
return Promise.race([p, timeout]).finally(() => clearTimeout(timer));
}
// Usage
try {
const data = await withTimeout(fetch('/slow-api').then(r => r.json()), 5_000, 'fetch /slow-api');
} catch (e) {
console.error(e); // either fetch error OR "fetch /slow-api timed out after 5000ms"
}
Create a free account and build your private vault. Share publicly whenever you want.