2016-04-22 24 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,我很快就明白了這一點。