Skip to content

Commit 55486bc

Browse files
fuxingZhangMylesBorins
authored andcommittedMar 9, 2020
events: fix removeListener for Symbols
Fix removeListener when eventName type is 'symbol'. ```js const EventEmitter = require('events'); const myEmitter = new EventEmitter(); const sym = Symbol('symbol'); const fn = () => { }; myEmitter.on(sym, fn); myEmitter.on('removeListener', (...args) => { console.log('removeListener'); console.log(args, args[0] === sym, args[1] === fn); }); myEmitter.removeAllListeners() ``` When the listener's eventName type is 'symbol' and removeListener is called with no parameters, removeListener should be emitted. PR-URL: #31847 Reviewed-By: Anna Henningsen <[email protected]> Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: Ruben Bridgewater <[email protected]> Reviewed-By: Shelley Vohr <[email protected]> Reviewed-By: Yongsheng Zhang <[email protected]> Reviewed-By: Luigi Pinca <[email protected]> Reviewed-By: James M Snell <[email protected]>
1 parent 2585b81 commit 55486bc

File tree

2 files changed

+14
-2
lines changed

2 files changed

+14
-2
lines changed
 

‎lib/events.js

+1-2
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ const {
3131
ObjectDefineProperty,
3232
ObjectGetPrototypeOf,
3333
ObjectSetPrototypeOf,
34-
ObjectKeys,
3534
Promise,
3635
PromiseReject,
3736
PromiseResolve,
@@ -526,7 +525,7 @@ EventEmitter.prototype.removeAllListeners =
526525

527526
// Emit removeListener for all listeners on all events
528527
if (arguments.length === 0) {
529-
for (const key of ObjectKeys(events)) {
528+
for (const key of ReflectOwnKeys(events)) {
530529
if (key === 'removeListener') continue;
531530
this.removeAllListeners(key);
532531
}

‎test/parallel/test-event-emitter-remove-all-listeners.js

+13
Original file line numberDiff line numberDiff line change
@@ -108,3 +108,16 @@ function expect(expected) {
108108
ee._events = undefined;
109109
assert.strictEqual(ee, ee.removeAllListeners());
110110
}
111+
112+
{
113+
const ee = new events.EventEmitter();
114+
const symbol = Symbol('symbol');
115+
const noop = common.mustNotCall();
116+
ee.on(symbol, noop);
117+
118+
ee.on('removeListener', common.mustCall((...args) => {
119+
assert.deepStrictEqual(args, [symbol, noop]);
120+
}));
121+
122+
ee.removeAllListeners();
123+
}

0 commit comments

Comments
 (0)