Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
fixup! change order for listeners
  • Loading branch information
Benjamin Gruenbaum authored and benjamingr committed Jun 6, 2020
commit d783fc5acb56536d0b681c0a221fde452b362fa9
16 changes: 8 additions & 8 deletions lib/events.js
Original file line number Diff line number Diff line change
Expand Up @@ -647,26 +647,26 @@ function addErrorHandlerIfEventEmitter(emitter, handler, flags) {
}

function eventTargetAgnosticRemoveListener(emitter, name, listener, flags) {
if (typeof emitter.removeEventListener === 'function') {
emitter.removeEventListener(name, listener, flags);
} else if (typeof emitter.removeListener === 'function') {
if (typeof emitter.removeListener === 'function') {
emitter.removeListener(name, listener);
} else if (typeof emitter.removeEventListener === 'function') {
emitter.removeEventListener(name, listener, flags);
} else {
throw new ERR_INVALID_ARG_TYPE('emitter', 'EventEmitter', emitter);
}
}

function eventTargetAgnosticAddListener(emitter, name, listener, flags) {
if (typeof emitter.addEventListener === 'function') {
// EventTarget does not have `error` event semantics like Node
// EventEmitters, we do not listen to `error` events here.
emitter.addEventListener(name, (arg) => { listener(arg); }, flags);
} else if (typeof emitter.on === 'function') {
if (typeof emitter.on === 'function') {
if (flags && flags.once) {
emitter.once(name, listener);
} else {
emitter.on(name, listener);
}
} else if (typeof emitter.addEventListener === 'function') {
// EventTarget does not have `error` event semantics like Node
// EventEmitters, we do not listen to `error` events here.
Comment on lines 667 to 668

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this comment should go to the addErrorHandlerIfEventEmitter.

emitter.addEventListener(name, (arg) => { listener(arg); }, flags);
} else {
throw new ERR_INVALID_ARG_TYPE('emitter', 'EventEmitter', emitter);
}
Expand Down
10 changes: 9 additions & 1 deletion test/parallel/test-events-once.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

const common = require('../common');
const { once, EventEmitter } = require('events');
const { strictEqual, deepStrictEqual } = require('assert');
const { strictEqual, deepStrictEqual, fail } = require('assert');
const { EventTarget, Event } = require('internal/event_target');

async function onceAnEvent() {
Expand Down Expand Up @@ -107,6 +107,13 @@ async function onceWithEventTargetError() {
strictEqual(err, error);
}

async function prioritizesEventEmitter() {
const ee = new EventEmitter();
ee.addEventListener = fail;
ee.removeAllListeners = fail;
process.nextTick(() => ee.emit('foo'));
await once(ee, 'foo');
}
Comment thread
lundibundi marked this conversation as resolved.
Outdated
Promise.all([
onceAnEvent(),
onceAnEventWithTwoArgs(),
Expand All @@ -115,4 +122,5 @@ Promise.all([
onceError(),
onceWithEventTarget(),
onceWithEventTargetError(),
prioritizesEventEmitter(),
]).then(common.mustCall());