Node.js - Emissor de evento
Muitos objetos em um Node emitem eventos, por exemplo, um net.Server emite um evento cada vez que um par se conecta a ele, um fs.readStream emite um evento quando o arquivo é aberto. Todos os objetos que emitem eventos são as instâncias de events.EventEmitter.
Classe EventEmitter
Como vimos na seção anterior, a classe EventEmitter está no módulo de eventos. É acessível através do seguinte código -
// Import events module
var events = require('events');
// Create an eventEmitter object
var eventEmitter = new events.EventEmitter();
Quando uma instância de EventEmitter enfrenta qualquer erro, ela emite um evento de 'erro'. Quando um novo ouvinte é adicionado, o evento 'newListener' é disparado e quando um ouvinte é removido, o evento 'removeListener' é disparado.
EventEmitter fornece várias propriedades como on e emit. on propriedade é usada para vincular uma função com o evento e emit é usado para disparar um evento.
Métodos
Sr. Não. | Método e Descrição |
---|---|
1 |
addListener(event, listener) Adiciona um ouvinte no final da matriz de ouvintes para o evento especificado. Nenhuma verificação é feita para ver se o ouvinte já foi adicionado. Várias chamadas passando a mesma combinação de evento e ouvinte resultarão na adição do ouvinte várias vezes. Emissor de retorno, para que as chamadas possam ser encadeadas. |
2 |
on(event, listener) Adiciona um ouvinte no final da matriz de ouvintes para o evento especificado. Nenhuma verificação é feita para ver se o ouvinte já foi adicionado. Várias chamadas passando a mesma combinação de evento e ouvinte resultarão na adição do ouvinte várias vezes. Emissor de retorno, para que as chamadas possam ser encadeadas. |
3 | once(event, listener) Adiciona um ouvinte único ao evento. Esse ouvinte é chamado apenas na próxima vez que o evento é disparado, após o que é removido. Emissor de retorno, para que as chamadas possam ser encadeadas. |
4 |
removeListener(event, listener) Remove um ouvinte da matriz do ouvinte para o evento especificado. Caution −Ele muda os índices da matriz na matriz do ouvinte atrás do ouvinte. removeListener removerá, no máximo, uma instância de um listener da matriz de listener. Se qualquer ouvinte único tiver sido adicionado várias vezes à matriz do ouvinte para o evento especificado, removeListener deve ser chamado várias vezes para remover cada instância. Emissor de retorno, para que as chamadas possam ser encadeadas. |
5 |
removeAllListeners([event]) Remove todos os ouvintes ou aqueles do evento especificado. Não é uma boa ideia remover ouvintes que foram adicionados em outro lugar no código, especialmente quando está em um emissor que você não criou (por exemplo, soquetes ou fluxos de arquivo). Emissor de retorno, para que as chamadas possam ser encadeadas. |
6 |
setMaxListeners(n) Por padrão, EventEmitters imprimirá um aviso se mais de 10 ouvintes forem adicionados para um determinado evento. Este é um padrão útil que ajuda a encontrar vazamentos de memória. Obviamente, nem todos os Emissores devem ser limitados a 10. Esta função permite que isso seja aumentado. Defina como zero para ilimitado. |
7 |
listeners(event) Retorna uma matriz de ouvintes para o evento especificado. |
8 |
emit(event, [arg1], [arg2], [...]) Execute cada um dos ouvintes em ordem com os argumentos fornecidos. Retorna verdadeiro se o evento tiver ouvintes e falso caso contrário. |
Métodos de aula
Sr. Não. | Método e Descrição |
---|---|
1 |
listenerCount(emitter, event) Retorna o número de ouvintes de um determinado evento. |
Eventos
Sr. Não. | Eventos e Descrição |
---|---|
1 | newListener
Este evento é emitido sempre que um ouvinte é adicionado. Quando esse evento é disparado, o ouvinte pode ainda não ter sido adicionado à matriz de ouvintes do evento. |
2 |
removeListener
Este evento é emitido sempre que alguém remove um ouvinte. Quando esse evento é disparado, o ouvinte pode ainda não ter sido removido da matriz de ouvintes do evento. |
Exemplo
Crie um arquivo js chamado main.js com o seguinte código Node.js -
var events = require('events');
var eventEmitter = new events.EventEmitter();
// listener #1
var listner1 = function listner1() {
console.log('listner1 executed.');
}
// listener #2
var listner2 = function listner2() {
console.log('listner2 executed.');
}
// Bind the connection event with the listner1 function
eventEmitter.addListener('connection', listner1);
// Bind the connection event with the listner2 function
eventEmitter.on('connection', listner2);
var eventListeners = require('events').EventEmitter.listenerCount
(eventEmitter,'connection');
console.log(eventListeners + " Listner(s) listening to connection event");
// Fire the connection event
eventEmitter.emit('connection');
// Remove the binding of listner1 function
eventEmitter.removeListener('connection', listner1);
console.log("Listner1 will not listen now.");
// Fire the connection event
eventEmitter.emit('connection');
eventListeners = require('events').EventEmitter.listenerCount(eventEmitter,'connection');
console.log(eventListeners + " Listner(s) listening to connection event");
console.log("Program Ended.");
Agora execute o main.js para ver o resultado -
$ node main.js
Verifique a saída.
2 Listner(s) listening to connection event
listner1 executed.
listner2 executed.
Listner1 will not listen now.
listner2 executed.
1 Listner(s) listening to connection event
Program Ended.