Skip to content

Commit

Permalink
fix: use the built-in abortable async setTimeout from `node:timers/pr…
Browse files Browse the repository at this point in the history
…omises` rather than implementing ourselves (#33)
  • Loading branch information
zone117x authored Mar 4, 2025
1 parent be9721b commit 954e7ea
Showing 1 changed file with 3 additions and 14 deletions.
17 changes: 3 additions & 14 deletions src/helpers/time.ts
Original file line number Diff line number Diff line change
@@ -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.
Expand All @@ -7,19 +7,8 @@ import { addAbortListener } from 'node:events';
* @returns Promise
*/
export function timeout(ms: number, abort?: AbortController | AbortSignal): Promise<void> {
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 });
}

/**
Expand Down

0 comments on commit 954e7ea

Please sign in to comment.