From c2ed0ef59ca73144b1e78d898c0ad89b08117da2 Mon Sep 17 00:00:00 2001 From: Matthew Little Date: Tue, 4 Mar 2025 09:50:07 -0700 Subject: [PATCH] fix: use the built-in abortable async setTimeout from `node:timers/promises` rather than implementing ourselves --- src/helpers/time.ts | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/src/helpers/time.ts b/src/helpers/time.ts index 37b7faa..e1c6e46 100644 --- a/src/helpers/time.ts +++ b/src/helpers/time.ts @@ -1,4 +1,4 @@ -import { addAbortListener } from 'node:events'; +import { setTimeout as setTimeoutAsync } from 'node:timers/promises'; /** * Wait a set amount of milliseconds or until the timer is aborted. @@ -7,19 +7,8 @@ import { addAbortListener } from 'node:events'; * @returns Promise */ export function timeout(ms: number, abort?: AbortController | AbortSignal): Promise { - return new Promise((resolve, reject) => { - const signal = abort && 'signal' in abort ? abort.signal : abort; - if (signal?.aborted) return reject(signal.reason); - const disposable = signal ? addAbortListener(signal, onAbort) : undefined; - const timeout = setTimeout(() => { - disposable?.[Symbol.dispose ?? (Symbol.for('nodejs.dispose') as typeof Symbol.dispose)](); - resolve(); - }, ms); - function onAbort() { - clearTimeout(timeout); - reject(signal?.reason); - } - }); + const signal = abort && (abort instanceof AbortSignal ? abort : abort.signal); + return setTimeoutAsync(ms, undefined, { signal }); } /**