2016-04-22 71 views
0

任何想法,为什么Facebook emitter不低于token.remove()呼叫工作:无法获得token.remove()在Facebook的工作发射

控制台:

$ node main.js 
5 10 
/Users/carlf/Documents/dev/test/emitter/emit-node.js:21 
token.remove(); 
    ^
TypeError: undefined is not a function 

我的代码:

var {EventEmitter} = require('./node_modules/emitter'); 
var emitter = new EventEmitter(); 

var token = emitter.addListener('event', function(x, y) { console.log(x, y); }); 

emitter.emit('event', 5, 10); // Listener prints "5 10". 

token.remove(); 
emitter.emit('event', 9, 11); // nothing is logged 

回答

1

该错误告诉你,删除不是一个函数。要删除侦听器,您需要调用EventEmitter该实例的removeListener方法,以传递事件的名称和您提供的回调。试试这个:

var {EventEmitter} = require('./node_modules/emitter'); 
var emitter = new EventEmitter(); 

function handler(x, y) { 
    console.log(x,y); 
} 

emitter.addListener('event', handler); 

emitter.emit('event', 5, 10); // Listener prints "5 10". 

emitter.removeListener('event', handler); 

emitter.emit('event', 9, 11); // nothing is logged 
+0

removeListener()不显示在搜索gitHub源。另外,我用'token.remove()'的例子就在Emitter gitHub页面上,所以应该可以工作。 –

+1

@GiantElk如果您尝试使用Fbemitter,则需要使用错误的模块。第一行应该是'var {EventEmitter} = require('fbemitter');'因为这是包的名字。您也不需要包含node_modules的相对路径。无论如何,它会在那里检查。 – aray12

0

我的错误是我打npm install emitter,应在被npm install fbemitter'. What threw me was there were no error messages that made this obvious, looks like the core API calls are same in both packages. At least for的addListener()and EMIT()`。

一旦我在'package.json'中检查了版本#和github的URL,我很快就明白了这一点。