AULA 29 MÓDULO 3 orientação a eventos ⏱ 50 min

Paradigma Orientado a Eventos

Eventos como notificação desacoplada. O event loop do Node.js. Por que Node processa I/O sem bloquear.

eventoemitterlistenerevent loopmicrotaskmacrotask

O que é um evento

Um evento é a notificação de que algo aconteceu. Em vez de A chamar B diretamente, A emite um evento. B (e C, D...) escuta esse evento e reage de forma independente. Desacoplamento total.

📻
analogia — rádio
A rádio emite o sinal. Quem tem receptor, ouve. A rádio não sabe quantas pessoas estão ouvindo. Cada ouvinte reage de forma independente. Isso é orientação a eventos.
Chamada direta (acoplado)
OrderService.create()
→ EmailService.send()
→ StockService.decrement()
→ AnalyticsService.track()
Evento (desacoplado)
OrderService.emit("order.created")
← EmailService ouve
← StockService ouve
← AnalyticsService ouve

O Event Loop do Node.js

O event loop é o coração do Node.js. Um único thread que processa eventos em fila — sem bloquear enquanto aguarda I/O.

⚙️
como funciona
Quando você faz fs.readFile(), o Node delega ao SO, registra o callback e continua. Quando o arquivo está pronto, o SO notifica o Node, que coloca o callback na fila do event loop. Sem thread bloqueada.
javascript
// Event loop — demonstração com timer
console.log("1 — síncrono")

setTimeout(() => console.log("3 — macrotask"), 0)

Promise.resolve().then(() => console.log("2 — microtask"))

console.log("1.5 — ainda síncrono")

// Output: 1 → 1.5 → 2 → 3
// Microtasks (Promise) antes de macrotasks (setTimeout)

// I/O não-bloqueante
const fs = require('fs')
fs.readFile('./data.json', 'utf8', (err, data) => {
  // Executado quando o arquivo estiver pronto
  // Enquanto isso, outras requisições foram processadas
  console.log('Arquivo lido:', data.length, 'bytes')
})
console.log("Continua sem bloquear!")
quiz · aula 29
Teste seus conhecimentos
0/3 respondidas
QUESTÃO 01
Qual é a principal vantagem do paradigma orientado a eventos?
QUESTÃO 02
O que garante que o Node.js não bloqueia ao fazer I/O?
QUESTÃO 03
Qual a ordem de execução: sync, Promise, setTimeout(0)?
0/3