diff --git a/lib/events.js b/lib/events.js index 1c732802ef28aa..bfd22ce4e6cae1 100644 --- a/lib/events.js +++ b/lib/events.js @@ -687,9 +687,10 @@ EventEmitter.prototype.removeListener = this._events = { __proto__: null }; } else { delete events[type]; - if (events.removeListener) - this.emit('removeListener', type, list.listener || listener); } + + if (events.removeListener !== undefined) + this.emit('removeListener', type, list.listener || listener); } else if (typeof list !== 'function') { let position = -1; diff --git a/test/parallel/test-event-emitter-remove-listeners.js b/test/parallel/test-event-emitter-remove-listeners.js index f37d26eb258c23..7b94d31f45d221 100644 --- a/test/parallel/test-event-emitter-remove-listeners.js +++ b/test/parallel/test-event-emitter-remove-listeners.js @@ -168,3 +168,19 @@ function listener2() {} ee.removeListener('foo', listener1); assert.strictEqual(ee._events.foo, listener2); } + +{ + const { Writable } = require('stream'); + const stream = new Writable({ + write(chunk, encoding, callback) { + callback(); + } + }); + + stream.on('removeListener', common.mustCall((eventName, listener) => { + assert.strictEqual(eventName, 'finish'); + })); + + stream.once('finish', common.mustCall()); + stream.end(); +}