// Created on savesnippets.com ยท https://savesnippets.com/BcT4t5jerfIeu9 export function withTimeout(p: Promise, ms: number, label = 'operation'): Promise { let timer: ReturnType; const timeout = new Promise((_, 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" }