authorgravatar for git@paperclover.netclover caruso <git@paperclover.net> 2026-02-03 03:44:37-08:00
committergravatar for git@paperclover.netclover caruso <git@paperclover.net> 2026-02-03 03:55:50-08:00
log24465d155378c4b617a658a27385f1da2e381d90
treed10e4ad1564bab38ac0dbff6b5ab06a08b2ada2b
parentfb973bb80728e2a703b326d99d295ad881e11d96
signature Signed by SSH key SHA256:xbd+BjjhyBfwk7GVoURf9Yx0gzDerHbvYv7SddNWmAs

feat(lib/async): delay now works for long periods of time


1 files changed, 10 insertions(+), 2 deletions(-)

lib/async.ts+10-2
...@@ -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. */
239export function delay(ms: number): Cancelable<void> {239export 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);