From 18c1eb6330e6e2bd5572a64ce0e5b40555dad833 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 30 Mar 2023 14:20:35 +0200 Subject: [PATCH] config-loader: refactor waitOrAbort helper to handle multiple signals Signed-off-by: Patrik Oldsberg --- packages/config-loader/src/sources/utils.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/config-loader/src/sources/utils.ts b/packages/config-loader/src/sources/utils.ts index 5dfe66aaed..9978234195 100644 --- a/packages/config-loader/src/sources/utils.ts +++ b/packages/config-loader/src/sources/utils.ts @@ -32,22 +32,26 @@ export function simpleDefer(): SimpleDeferred { /** @internal */ export async function waitOrAbort( promise: PromiseLike, - signal?: AbortSignal, + signal?: AbortSignal | Array, ): Promise<[ok: true, value: T] | [ok: false]> { + const signals = [signal].flat().filter((x): x is AbortSignal => !!x); return new Promise((resolve, reject) => { + if (signals.some(s => s.aborted)) { + resolve([false]); + } const onAbort = () => { resolve([false]); }; promise.then( value => { resolve([true, value]); - signal?.removeEventListener('abort', onAbort); + signals.forEach(s => s.removeEventListener('abort', onAbort)); }, error => { reject(error); - signal?.removeEventListener('abort', onAbort); + signals.forEach(s => s.removeEventListener('abort', onAbort)); }, ); - signal?.addEventListener('abort', onAbort); + signals.forEach(s => s.addEventListener('abort', onAbort)); }); }