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
为处理程序。