Reputation: 1006
I'm storing an event listener inside a WeakMap and upon retrieving the function to remove it from the EventEmitter this error get's thrown:
TypeError: listener must be a function
I just can't figure out what the problem is:
var EventEmitter = require('events').EventEmitter;
var listeners = new WeakMap();
var eventEmitterA = new EventEmitter();
var eventEmitterB = new EventEmitter();
eventEmitterA.on('open', (obj) => {
function stuff() { /* ... */ }
listeners.set(obj, stuff);
eventEmitterB.on('stuff', stuff);
});
eventEmitterA.on('close', (obj) => {
var listener = listeners.get(obj);
console.log(typeof listener); // logs "function"
eventEmitterB.removeListener(listener);
});
var someObject = {some: 'object'};
eventEmitterA.emit('open', someObject);
eventEmitterA.emit('close', someObject);
Upvotes: 2
Views: 12962
Reputation: 161447
eventEmitterB.removeListener(listener);
should be
eventEmitterB.removeListener('stuff', listener);
removeListener
takes two arguments and the function is supposed to be the second argument, so you are passing the function as the name of the handler and undefined
as the handler.
Upvotes: 3