Dissoziationsereignisse in Node.js
-
29-09-2019 - |
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?
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