24

stdin.on例として挙げてみましょう。スタックするコールバックstdin.onなので、(CoffeeScriptで)書くと

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

その後、プロンプトでリターンを押すたびに、

One
Two

私の質問は、一度バインドされたコールバックを削除/置き換える方法はありますか? それとも、プロキシ コールバックをバインドして自分で状態を管理する唯一の方法ですか?

4

2 に答える 2

39

を使用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

于 2010-11-29T15:42:23.777 に答える
18

または、次を使用できます。

stdin.onceそれ以外のstdin.on

于 2012-05-10T20:30:49.453 に答える