TypeError:侦听器必须是一个函数

我正在一个WeakMap中存储一个事件监听器,并检索到从EventEmitter中删除它的函数,这个错误被抛出:

TypeError:侦听器必须是一个函数

我无法弄清楚问题所在:

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); 

 eventEmitterB.removeListener(listener); 

应该

 eventEmitterB.removeListener('stuff', listener); 

removeListener接受两个参数,函数应该是第二个参数,所以你传递函数作为处理程序的名称,而undefined为处理程序。