Skip to content

Commit d783fc5

Browse files
Benjamin Gruenbaumbenjamingr
Benjamin Gruenbaum
authored andcommitted
fixup! change order for listeners
1 parent a62ff6d commit d783fc5

File tree

2 files changed

+17
-9
lines changed

2 files changed

+17
-9
lines changed

lib/events.js

+8-8
Original file line numberDiff line numberDiff line change
@@ -647,26 +647,26 @@ function addErrorHandlerIfEventEmitter(emitter, handler, flags) {
647647
}
648648

649649
function eventTargetAgnosticRemoveListener(emitter, name, listener, flags) {
650-
if (typeof emitter.removeEventListener === 'function') {
651-
emitter.removeEventListener(name, listener, flags);
652-
} else if (typeof emitter.removeListener === 'function') {
650+
if (typeof emitter.removeListener === 'function') {
653651
emitter.removeListener(name, listener);
652+
} else if (typeof emitter.removeEventListener === 'function') {
653+
emitter.removeEventListener(name, listener, flags);
654654
} else {
655655
throw new ERR_INVALID_ARG_TYPE('emitter', 'EventEmitter', emitter);
656656
}
657657
}
658658

659659
function eventTargetAgnosticAddListener(emitter, name, listener, flags) {
660-
if (typeof emitter.addEventListener === 'function') {
661-
// EventTarget does not have `error` event semantics like Node
662-
// EventEmitters, we do not listen to `error` events here.
663-
emitter.addEventListener(name, (arg) => { listener(arg); }, flags);
664-
} else if (typeof emitter.on === 'function') {
660+
if (typeof emitter.on === 'function') {
665661
if (flags && flags.once) {
666662
emitter.once(name, listener);
667663
} else {
668664
emitter.on(name, listener);
669665
}
666+
} else if (typeof emitter.addEventListener === 'function') {
667+
// EventTarget does not have `error` event semantics like Node
668+
// EventEmitters, we do not listen to `error` events here.
669+
emitter.addEventListener(name, (arg) => { listener(arg); }, flags);
670670
} else {
671671
throw new ERR_INVALID_ARG_TYPE('emitter', 'EventEmitter', emitter);
672672
}

test/parallel/test-events-once.js

+9-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
const common = require('../common');
55
const { once, EventEmitter } = require('events');
6-
const { strictEqual, deepStrictEqual } = require('assert');
6+
const { strictEqual, deepStrictEqual, fail } = require('assert');
77
const { EventTarget, Event } = require('internal/event_target');
88

99
async function onceAnEvent() {
@@ -107,6 +107,13 @@ async function onceWithEventTargetError() {
107107
strictEqual(err, error);
108108
}
109109

110+
async function prioritizesEventEmitter() {
111+
const ee = new EventEmitter();
112+
ee.addEventListener = fail;
113+
ee.removeAllListeners = fail;
114+
process.nextTick(() => ee.emit('foo'));
115+
await once(ee, 'foo');
116+
}
110117
Promise.all([
111118
onceAnEvent(),
112119
onceAnEventWithTwoArgs(),
@@ -115,4 +122,5 @@ Promise.all([
115122
onceError(),
116123
onceWithEventTarget(),
117124
onceWithEventTargetError(),
125+
prioritizesEventEmitter(),
118126
]).then(common.mustCall());

0 commit comments

Comments
 (0)