Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript TypeError:侦听器必须是函数_Javascript_Node.js_Eventemitter - Fatal编程技术网

Javascript TypeError:侦听器必须是函数

Javascript TypeError:侦听器必须是函数,javascript,node.js,eventemitter,Javascript,Node.js,Eventemitter,我将事件侦听器存储在WeakMap中,在检索函数以将其从EventEmitter中删除时,将抛出此错误: TypeError:侦听器必须是函数 我就是不知道问题出在哪里: var EventEmitter = require('events').EventEmitter; var listeners = new WeakMap(); var eventEmitterA = new EventEmitter(); var eventEmitterB = new EventEmitter();

我将事件侦听器存储在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('stuff', listener);

RemovelListener
接受两个参数,函数应该是第二个参数,因此您将函数作为处理程序的名称传递,而
undefined
作为处理程序传递。

EventEmitter.on('close',…)
中,侦听器的类型是什么?如果typeof是函数,那么您有一个
console.log()
,但它实际上是什么呢?console.log(typeof listener)生成“函数”,有些可能会有帮助
eventEmitterB.removeListener('stuff', listener);