2010-11-29 3 views
19

stdin.on을 예로 들어 봅시다. stdin.on 스택 콜백, 그래서 (커피 스크립트에) 작성하는 경우Node.js의 이벤트 바인딩 해제

stdin = process.openStdin() 
stdin.setEncoding 'utf8' 
stdin.on 'data', (input) -> console.log 'One' 
stdin.on 'data', (input) -> console.log 'Two' 

는 내가 프롬프트에서 수익을 누를 때마다, 나는 내 질문은

One 
Two 

를 얻을 수, 제거 할 수있는 방법이있다/바인딩 된 콜백을 대체 하시겠습니까? 아니면 프록시 콜백을 바인드하고 상태를 직접 관리하는 유일한 방법입니까?

+0

stdin.on의 방법 제거 인라인 리스너 기능? Like'server.on ('connect', function (pkt) {...}); ' – kBisla

답변

29

removeListener(eventType, callback)을 사용하면 모든 종류의 이미 터에서 사용할 수있는 이벤트를 제거 할 수 있습니다. 은 API 문서에서

예 :

var callback = function(stream) { 
    console.log('someone connected!'); 
}; 
server.on('connection', callback); 
// ... 
server.removeListener('connection', callback); 

그래서 당신은 분명히 당신이 제거한 할 콜백하는 말, 그렇지 않으면 불가능하기 때문에, 콜백에 대한 참조를 유지하는 변수가 필요합니다.

편집
CS에서이 같은 사람이어야한다 :

stdin = process.openStdin() 
stdin.setEncoding 'utf8' 

logger = (input) -> console.log 'One' 
stdin.on 'data', logger 
stdin.removeListener 'data', logger 

stdin.on 'data', (input) -> console.log 'Two' 

참조 : http://nodejs.org/docs/latest/api/events.html#emitter.removeListener

+0

고맙습니다. –

+1

잘 작동하지만 인라인 리스너 기능을 제거 할 수있는 방법이 있습니까? 'server.on ('connect', function (pkt) {...})와 유사합니다. – kBisla

15

또는 당신은 사용할 수 있습니다

stdin.once 대신