가장 최근에 추가 된 리스너를 제외한 모든 리스너를 제거하는 방법을 찾고자합니다. 가장 최근의 것을 제외한 모든 이벤트 이미 터 수신기를 제거합니다.
그래서 process.stdin을 위해, 우리는 내가 콜백 A와 B를 제거 할process.stdin.on('readable',function a(){});
process.stdin.on('readable',function b(){});
process.stdin.on('readable',function c(){});
할 수 있지만, C를두고 있습니다. 내가 A 또는 B에 대한 참조가없는이 경우 그러나
는, 내가 좋아하는 뭔가를하고 싶지 :
while(process.stdin.listenerCount('readable') > 1){
process.stdin.removeListener('readable');
}
을하지만 난 당신이 함수를 전달할 필요가 있다고 생각이 주위에 어떤 방법을. ?
리스너를 제거하려면 추가 할 때 사용한 함수를 전달해야합니다. 그리고 함수가 필요하므로 익명의 함수가 될 수 없습니다.이 함수는 공통 범위에서 선언 된 명명 된 함수 여야하므로 추가 될 때와 동일한 참조를 제거해야합니다. – jfriend00
당신이 맞습니다. 이상한 것 같아요 removeListener ('event-name') 함수를 두 번째 인수로 호출하면 배열에서 가장 오래된 수신기를 팝하지 않을 것입니다 –
이상한가요? 나는 그렇게 생각하지 않는다. 그것은 코딩 무결성 문제입니다. 함수에 대한 참조가 없으면 리스너를 제거 할 수 없습니다. 에미 터는 자신의 코드 내에서뿐만 아니라 외부 코드를 포함한 많은 곳에서 사용하도록 설계되었습니다. 리스너 참조를 저장하는'.on()'에 대한 오버 라이드를 래핑하여 원하는대로 핸들러를 제거 할 수 있습니다. 그리 어렵지 않습니다. – jfriend00