最近追加されたリスナーを除くすべてのリスナーを削除する方法を探してください。最新のものを除くすべてのイベントエミッタリスナーを削除します。
のでprocess.stdinのために、私たちは、私は、コールバックAおよびBを削除しますが、Cを残したい
process.stdin.on('readable',function a(){});
process.stdin.on('readable',function b(){});
process.stdin.on('readable',function c(){});
を行う可能性があります。
ただし、この場合には、私がまたはbへの参照を持っていない、私のような何かやりたい:
while(process.stdin.listenerCount('readable') > 1){
process.stdin.removeListener('readable');
}
を私はあなたがで関数を渡す必要があると思う。この周りの任意の方法。 ?
リスナーを削除する場合は、追加時に使用された関数を渡す必要があります。また、関数が必要なので、匿名関数にすることはできません。共通スコープで宣言された名前付き関数でなければなりません。 – jfriend00
あなたは間違いなく正しいです。 2番目の引数としてremoveListener( 'event-name')を呼び出すと、最も古いリスナーが配列外にポップされてしまうのではないかと思って変わったようです。 –
奇妙なことですか?私はそうは思わない。それはコーディングの完全性の事です。関数への参照がない場合は、リスナーを削除することはできません。エミッタは、自分のコード内だけでなく、多くの外部コードを使用するように設計されています。リスナー参照を保存する '.on()'のために独自のオーバーライドをラップすることができるので、必要に応じてハンドラを削除することができます。それを実装するのは難しくありません。 – jfriend00