@blackglory/wait-for
Version:
A module for waiting for things to happen.
22 lines (18 loc) • 524 B
text/typescript
import type { EventEmitter } from 'events'
export function waitForEventEmitter<T extends EventEmitter>(
target: T
, event: string
, signal?: AbortSignal
): Promise<unknown[]> {
return new Promise((resolve, reject) => {
if (signal?.aborted) return reject(signal.reason)
target.once(event, handler)
signal?.addEventListener('abort', () => {
target.off(event, handler)
reject(signal.reason)
}, { once: true })
function handler(...args: unknown[]): void {
resolve(args)
}
})
}