AULA 30
MÓDULO 3
orientação a eventos
⏱ 45 min
EventEmitter no Node.js
A classe EventEmitter do Node. on, once, emit, off. Herdar EventEmitter em classes de domínio. Memory leaks e como evitar.
EventEmitterononceemitoffmemory leak
EventEmitter
Node.js tem a classe EventEmitter embutida que é a base do sistema de eventos. A maioria dos módulos nativos (fs, http, stream) herdam de EventEmitter.
on vs once
emitter.on(evento, fn) — ouve infinitas vezes. emitter.once(evento, fn) — ouve apenas uma vez e remove o listener. Use once para eventos de inicialização, on para eventos recorrentes.Herdando EventEmitter
O padrão correto em Node.js é criar classes que herdam de EventEmitter para adicionar comportamento orientado a eventos a domínios do sistema.
memory leak
Adicionar listeners em loops sem remover é a causa #1 de memory leaks em Node. Use emitter.removeListener() ou emitter.off(), ou prefira once() quando o listener é de uso único.
javascript
// EventEmitter básico const { EventEmitter } = require('events') const emitter = new EventEmitter() // Registrar listener emitter.on('user.created', (user) => { console.log('Enviar email para:', user.email) }) emitter.on('user.created', (user) => { console.log('Registrar no analytics:', user.id) }) // Emitir evento emitter.emit('user.created', { id: 1, email: 'ana@ex.com' }) // Ambos os listeners disparam // Herdar EventEmitter — padrão para domínios class OrderService extends EventEmitter { async create(data) { const order = await db.orders.create(data) this.emit('order.created', order) // notifica sem saber quem ouve return order } }
quiz · aula 30
Teste seus conhecimentos
0/3 respondidas
QUESTÃO 01
Qual a diferença entre on() e once()?
QUESTÃO 02
Por que adicionar listeners em loops pode causar memory leak?
QUESTÃO 03
O que acontece quando emitter.emit('order.created') é chamado?
0/3