// Created on savesnippets.com ยท https://savesnippets.com/8vmql6HpKqiNHQ export function sleep(ms: number, signal?: AbortSignal): Promise { return new Promise((resolve, reject) => { if (signal?.aborted) return reject(signal.reason); const timer = setTimeout(resolve, ms); signal?.addEventListener('abort', () => { clearTimeout(timer); reject(signal.reason); }, { once: true }); }); } // Usage await sleep(1000); await sleep(5000, AbortSignal.timeout(2000)); // throws after 2s