diff options
author | Denys Otrishko <shishugi@gmail.com> | 2020-08-31 19:41:21 +0300 |
---|---|---|
committer | Denys Otrishko <shishugi@gmail.com> | 2020-09-11 18:04:40 +0300 |
commit | b1831fed3a289d883944d23d2130368d90a48be2 (patch) | |
tree | 3a736fa52a80a41c67886ef5d4646dd722808402 /lib/events.js | |
parent | c66e6471e780e752f3f6f9337ac49a3d6e3d7091 (diff) | |
download | node-new-b1831fed3a289d883944d23d2130368d90a48be2.tar.gz |
events: simplify event target agnostic logic in on and once
PR-URL: https://github.com/nodejs/node/pull/34997
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Yongsheng Zhang <zyszys98@gmail.com>
Diffstat (limited to 'lib/events.js')
-rw-r--r-- | lib/events.js | 46 |
1 files changed, 10 insertions, 36 deletions
diff --git a/lib/events.js b/lib/events.js index 902b27544b..c1343acbf3 100644 --- a/lib/events.js +++ b/lib/events.js @@ -642,11 +642,7 @@ async function once(emitter, name, options = {}) { const errorListener = (err) => { emitter.removeListener(name, resolver); if (signal != null) { - eventTargetAgnosticRemoveListener( - signal, - 'abort', - abortListener, - { once: true }); + eventTargetAgnosticRemoveListener(signal, 'abort', abortListener); } reject(err); }; @@ -655,38 +651,22 @@ async function once(emitter, name, options = {}) { emitter.removeListener('error', errorListener); } if (signal != null) { - eventTargetAgnosticRemoveListener( - signal, - 'abort', - abortListener, - { once: true }); + eventTargetAgnosticRemoveListener(signal, 'abort', abortListener); } resolve(args); }; eventTargetAgnosticAddListener(emitter, name, resolver, { once: true }); - if (name !== 'error') { - addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true }); + if (name !== 'error' && typeof emitter.once === 'function') { + emitter.once('error', errorListener); } function abortListener() { - if (typeof emitter.removeListener === 'function') { - emitter.removeListener(name, resolver); - emitter.removeListener('error', errorListener); - } else { - eventTargetAgnosticRemoveListener( - emitter, - name, - resolver, - { once: true }); - eventTargetAgnosticRemoveListener( - emitter, - 'error', - errorListener, - { once: true }); - } + eventTargetAgnosticRemoveListener(emitter, name, resolver); + eventTargetAgnosticRemoveListener(emitter, 'error', resolver); reject(lazyDOMException('The operation was aborted', 'AbortError')); } if (signal != null) { - signal.addEventListener('abort', abortListener, { once: true }); + eventTargetAgnosticAddListener( + signal, 'abort', abortListener, { once: true }); } }); } @@ -698,12 +678,6 @@ function createIterResult(value, done) { return { value, done }; } -function addErrorHandlerIfEventEmitter(emitter, handler, flags) { - if (typeof emitter.on === 'function') { - eventTargetAgnosticAddListener(emitter, 'error', handler, flags); - } -} - function eventTargetAgnosticRemoveListener(emitter, name, listener, flags) { if (typeof emitter.removeListener === 'function') { emitter.removeListener(name, listener); @@ -808,8 +782,8 @@ function on(emitter, event, options) { }, AsyncIteratorPrototype); eventTargetAgnosticAddListener(emitter, event, eventHandler); - if (event !== 'error') { - addErrorHandlerIfEventEmitter(emitter, errorHandler); + if (event !== 'error' && typeof emitter.on === 'function') { + emitter.on('error', errorHandler); } if (signal) { |