From 1334ccd2737e6010fe8718685e5e1c98a66254bd Mon Sep 17 00:00:00 2001 From: fregante Date: Fri, 15 Nov 2024 17:31:57 +0700 Subject: [PATCH] Discard changes to source/one-event.ts --- source/one-event.ts | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/source/one-event.ts b/source/one-event.ts index b7a4c39..cd2c72f 100644 --- a/source/one-event.ts +++ b/source/one-event.ts @@ -1,5 +1,3 @@ -import {addListener} from './add-listener.js'; - type AnyFunction = (...parameters: any[]) => void; type RemovableEvent unknown> = { @@ -25,21 +23,21 @@ export async function oneEvent>( return; } - const controller = new AbortController(); - const complete = controller.abort.bind(controller); - signal?.addEventListener('abort', complete, {once: true}); - - const listener = filter ? (...parameters: EventParameters) => { - if (filter(...parameters)) { - complete(); - } - } : complete; - - addListener(event, listener, { - signal: controller.signal, - }); - - await new Promise(resolve => { - controller.signal.addEventListener('abort', resolve, {once: true}); + await new Promise(resolve => { + // TODO: VoidFunction should not be necessary, it's equivalent to using "any" + const listener: VoidFunction = (...parameters: EventParameters) => { + if (!filter || filter(...parameters)) { + resolve(); + event.removeListener(listener); + } + }; + + event.addListener(listener); + + // TODO: The abort listener is left behind if never aborted + signal?.addEventListener('abort', () => { + resolve(); + event.removeListener(listener); + }); }); }