diff --git a/lib/async.ts b/lib/async.ts index e1f2eaf14d3bd48d4e8e7fff2cef01b74b750da8..dd7d69fb8b6a9ad612b131bda75045ffa35f3ceb 100644 --- a/lib/async.ts +++ b/lib/async.ts @@ -238,9 +238,17 @@ export function makeCancelable( /** wait `ms` milliseconds, then resolve. can be cancelled. */ export function delay(ms: number): Cancelable { let t: ts.Timer | null = null; + const maxTimer = 0x7FFFFFFF; return makeCancelable( - new Promise((resolve) => { - t = globalThis.setTimeout(() => (t = null, resolve()), ms); + new Promise(function tick(resolve) { + if (ms <= maxTimer) { + t = setTimeout(() => (t = null, resolve()), ms); + } else { + t = setTimeout(() => { + ms -= maxTimer; + tick(resolve); + }, maxTimer); + } }), () => { if (t != null) clearTimeout(t);