eventi non impegnativa in Node.js
-
29-09-2019 - |
Domanda
Let prendere stdin.on
come esempio. Callback a pila stdin.on
, quindi se scrivo (in CoffeeScript)
stdin = process.openStdin()
stdin.setEncoding 'utf8'
stdin.on 'data', (input) -> console.log 'One'
stdin.on 'data', (input) -> console.log 'Two'
allora ogni volta che mi ha colpito di ritorno al prompt, ottengo
One
Two
La mia domanda è, c'è qualche modo per rimuovere / sostituire un callback volta legato? O è l'unico approccio per associare un callback proxy e gestire lo stato me stesso?
Soluzione
È possibile utilizzare removeListener(eventType, callback)
per rimuovere un evento, che dovrebbe funzionare con tutti i tipi di emettitori.
Esempio dalla documentazione API:
var callback = function(stream) {
console.log('someone connected!');
};
server.on('connection', callback);
// ...
server.removeListener('connection', callback);
Quindi, è necessario disporre di una variabile che contiene un riferimento al callback, perché ovviamente, è altrimenti impossibile dire quale richiamata si desidera avere rimosso.
Modifica
Dovrebbe essere qualcuno come questo in 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'
See: http://nodejs.org/docs/latest/api/events.html # emitter.removeListener
Altri suggerimenti
In alternativa si può usare:
stdin.once
invece di stdin.on