summaryrefslogtreecommitdiff
path: root/lib/events.js
diff options
context:
space:
mode:
authorDenys Otrishko <shishugi@gmail.com>2020-08-31 19:41:21 +0300
committerDenys Otrishko <shishugi@gmail.com>2020-09-11 18:04:40 +0300
commitb1831fed3a289d883944d23d2130368d90a48be2 (patch)
tree3a736fa52a80a41c67886ef5d4646dd722808402 /lib/events.js
parentc66e6471e780e752f3f6f9337ac49a3d6e3d7091 (diff)
downloadnode-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.js46
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) {