Frage

Nehmen wir stdin.on als Beispiel. Rückrufe stdin.on Stapel, also wenn ich schreiben (in Coffeescript)

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

dann jedesmal, wenn ich getroffen Rückkehr an der Eingabeaufforderung, ich

One
Two

Meine Frage ist, gibt es eine Möglichkeit, einen Rückruf zu entfernen / ersetzen einmal gebunden? Oder ist der Ansatz nur einen Proxy-Rückruf zu binden und Staat selbst verwalten?

War es hilfreich?

Lösung

Sie können removeListener(eventType, callback) verwenden, um ein Ereignis zu entfernen, die mit allen Arten von Sendern funktionieren soll.

Beispiel von der API-Dokumentation:

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

So haben Sie eine Variable haben müssen, die einen Verweis auf die Callback hält, weil offensichtlich, es sonst unmöglich ist, was zu sagen Rückruf Sie entfernt haben möchten.

Bearbeiten
Sollte jemand so in CS sein:

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'

Siehe auch: http://nodejs.org/docs/latest/api/events.html # emitter.removeListener

Andere Tipps

Sie können auch verwendet werden:

stdin.once statt stdin.on

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top