TypeError: listener必须是一个函数

TypeError: listener must be a function

本文关键字:一个 函数 listener TypeError      更新时间:2023-09-26

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

TypeError: listener必须是一个函数

我就是想不出问题是什么:

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