events: propagate abortsignal reason in new AbortError ctor in events

Signed-off-by: James M Snell <jasnell@gmail.com>

PR-URL: https://github.com/nodejs/node/pull/41008
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: Robert Nagy <ronagy@icloud.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
This commit is contained in:
James M Snell 2021-11-28 12:57:58 -08:00
parent 5401e96e5d
commit c8a04049be
No known key found for this signature in database
GPG Key ID: 7341B15C070877AC

View File

@ -810,7 +810,7 @@ async function once(emitter, name, options = {}) {
const signal = options?.signal; const signal = options?.signal;
validateAbortSignal(signal, 'options.signal'); validateAbortSignal(signal, 'options.signal');
if (signal?.aborted) if (signal?.aborted)
throw new AbortError(); throw new AbortError(undefined, { cause: signal?.reason });
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const errorListener = (err) => { const errorListener = (err) => {
emitter.removeListener(name, resolver); emitter.removeListener(name, resolver);
@ -835,7 +835,7 @@ async function once(emitter, name, options = {}) {
function abortListener() { function abortListener() {
eventTargetAgnosticRemoveListener(emitter, name, resolver); eventTargetAgnosticRemoveListener(emitter, name, resolver);
eventTargetAgnosticRemoveListener(emitter, 'error', errorListener); eventTargetAgnosticRemoveListener(emitter, 'error', errorListener);
reject(new AbortError()); reject(new AbortError(undefined, { cause: signal?.reason }));
} }
if (signal != null) { if (signal != null) {
eventTargetAgnosticAddListener( eventTargetAgnosticAddListener(
@ -888,7 +888,7 @@ function on(emitter, event, options) {
const signal = options?.signal; const signal = options?.signal;
validateAbortSignal(signal, 'options.signal'); validateAbortSignal(signal, 'options.signal');
if (signal?.aborted) if (signal?.aborted)
throw new AbortError(); throw new AbortError(undefined, { cause: signal?.reason });
const unconsumedEvents = []; const unconsumedEvents = [];
const unconsumedPromises = []; const unconsumedPromises = [];
@ -976,7 +976,7 @@ function on(emitter, event, options) {
return iterator; return iterator;
function abortListener() { function abortListener() {
errorHandler(new AbortError()); errorHandler(new AbortError(undefined, { cause: signal?.reason }));
} }
function eventHandler(...args) { function eventHandler(...args) {