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)); }); }