| ... | @@ -238,9 +238,17 @@ export function makeCancelable<T>( | ... | @@ -238,9 +238,17 @@ export function makeCancelable<T>( |
| 238 | /** wait `ms` milliseconds, then resolve. can be cancelled. */ | 238 | /** wait `ms` milliseconds, then resolve. can be cancelled. */ |
| 239 | export function delay(ms: number): Cancelable<void> { | 239 | export function delay(ms: number): Cancelable<void> { |
| 240 | let t: ts.Timer | null = null; | 240 | let t: ts.Timer | null = null; |
| | 241 | const maxTimer = 0x7FFFFFFF; |
| 241 | return makeCancelable( | 242 | return makeCancelable( |
| 242 | new Promise((resolve) => { | 243 | new Promise(function tick(resolve) { |
| 243 | t = globalThis.setTimeout(() => (t = null, resolve()), ms); | 244 | if (ms <= maxTimer) { |
| | 245 | t = setTimeout(() => (t = null, resolve()), ms); |
| | 246 | } else { |
| | 247 | t = setTimeout(() => { |
| | 248 | ms -= maxTimer; |
| | 249 | tick(resolve); |
| | 250 | }, maxTimer); |
| | 251 | } |
| 244 | }), | 252 | }), |
| 245 | () => { | 253 | () => { |
| 246 | if (t != null) clearTimeout(t); | 254 | if (t != null) clearTimeout(t); |