Módulo de eventos Node.js

Resumo : neste tutorial você aprenderá sobre o eventsmódulo Node.js e como ele funciona.

Introdução ao módulo de eventos do Node.js

Node.js é orientado a eventos. Ele depende do eventsmódulo principal para alcançar a arquitetura orientada a eventos.

No modelo orientado a eventos, um EventEmitterobjeto gera um evento que faz com que os ouvintes previamente anexados do evento sejam executados.

Um EventEmitterobjeto tem duas funções principais:

  • Emita um evento nomeado.
  • Anexe e desanexe um ou mais ouvintes de eventos ao evento nomeado.

No Node.js, muitos módulos principais herdam a EventEmitterclasse, incluindo httpo módulo.

O exemplo a seguir ilustra como usar o eventsmódulo.

Primeiro, inclua o eventsmódulo usando a require()função:

const EventEmitter = require('events');Linguagem de código:  JavaScript  ( javascript )

The EventEmitteré uma classe, então por convenção seu nome está no caso camel.

Segundo, crie uma nova instância da EventEmitterclasse:

const emitter = new EventEmitter();
Linguagem de código:  JavaScript  ( javascript )

Terceiro, anexe um ou mais manipuladores de eventos ao evento usando o on()método:

emitter.on('saved', ) => {
    console.log(`A saved event occurred.`);
});
Linguagem de código:  JavaScript  ( javascript )

Neste exemplo, o nome do evento é savede o manipulador de eventos é um retorno de chamada. Quando o savedevento ocorre, o retorno de chamada é invocado automaticamente.

Por fim, emita o savedevento usando o emit()método do EventEmitterobjeto:

emitter.emit('saved');Linguagem de código:  JavaScript  ( javascript )

Junte tudo:

const EventEmitter = require('events');

const emitter = new EventEmitter();

emitter.on('saved', () => {
    console.log(`A saved event occurred.`);
});

emitter.emit('saved');Linguagem de código:  JavaScript  ( javascript )

Saída:

A saved event occurred.
Linguagem de código:  JavaScript  ( javascript )

Emita um evento com argumentos

Ao gerar um evento, você pode querer passar alguns dados para o ouvinte do evento, por exemplo, o objeto que foi salvo quando o savedevento ocorreu. Nesse caso, você pode passar os dados para o emit()método como segundo argumento. Por exemplo:

const EventEmitter = require('events');

const emitter = new EventEmitter();

emitter.on('saved',  (arg) => {
    console.log(`A saved event occurred: name: ${arg.name}, id: ${arg.id}`);
});

emitter.emit('saved', {
    id: 1,
    name: 'John Doe'
});Linguagem de código:  JavaScript  ( javascript )

Saída:

A saved event occurred, name: John Doe, id: 1Linguagem de código:  JavaScript  ( javascript )

Neste exemplo, ao emitirmos o savedevento, passamos um objeto que possui duas propriedades ide namepara o emit()método. E quando o evento ocorre, mostramos as propriedades do objeto no console.

Desanexar um ouvinte de evento

Para separar um ouvinte de evento de um evento, você usa o off()método do EventEmitterobjeto. Por exemplo:

const EventEmitter = require('events');

const emitter = new EventEmitter();

// declare the event handler
function log(arg) {
    console.log(`A saved event occurred, name: ${arg.name}, id: ${arg.id}`);
}

// attach the event listener to the saved event
emitter.on('saved', log);

// emit the saved event
emitter.emit('saved', {
    id: 1,
    name: 'John Doe'
});

// remove the event listener
emitter.off('saved', log);

// no effect
emitter.emit('saved', {
    id: 2,
    name: 'Jane Doe'
});Linguagem de código:  JavaScript  ( javascript )

Saída:

A saved event occurred, name: John Doe, id: 1

Neste exemplo, após desanexar o ouvinte de evento do evento. O ouvinte de evento não é chamado quando o savedevento é emitido.

Estenda a classe EventEmitter

O exemplo a seguir ilustra como estender a EventEmitterclasse:

const EventEmitter = require('events');

class Stock extends EventEmitter {
    constructor(symbol, price) {
        super();
        this._symbol = symbol;
        this._price = price;
    }
    set price(newPrice) {
        if (newPrice !== this._price) {
            this.emit('PriceChanged', {
                symbol: this._symbol,
                oldPrice: this._price,
                newPrice: newPrice,
                adjustment: ((newPrice - this._price) * 100 / this._price).toFixed(2)
            });
        }
    }
    get price() {
        return this._price;
    }
    get symbol() {
        return this._symbol;
    }
}
Linguagem de código:  JavaScript  ( javascript )

Como funciona.

  • A Stockclasse estende a EventEmitterclasse. Possui duas propriedades em estoque symbole price.
  • Quando pricemuda, o pricesetter emite o PriceChangedevento com um objeto.

O seguinte ilustra como usar a Stockclasse:

const stock = new Stock('AAPL', 700);

stock.on('PriceChanged', (arg) => {
    console.log(`The price of the stock ${arg.symbol} has changed ${arg.adjustment}%`);
})

stock.price = 720;
Linguagem de código:  JavaScript  ( javascript )

Saída:

The price of the stock AAPL has changed 2.86%Linguagem de código:  JavaScript  ( javascript )

Resumo

  • O módulo Node.js eventsfornece uma EventEmitterclasse que permite gerenciar eventos no aplicativo do nó.
  • Use o on()método do EventEmitterobjeto para registrar um manipulador de eventos para um evento.
  • Use o emit()método do EventEmitterobjeto para emitir um evento.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *