Módulo de eventos assíncronos
Em sistemas assíncronos, como servidores web ou aplicações em tempo real, é comum ter eventos que disparam ações que podem levar tempo, como enviar emails ou atualizar bancos de dados. Usar um barramento de eventos com suporte a handlers assíncronos garante que todas as ações sejam concluídas de forma confiável, evitando que o programa prossiga antes de tarefas críticas terminarem. Dominar esse padrão evita problemas como perda de notificações ou execução fora de ordem.
O PROBLEMA
Crie módulo eventBus.js com pub/sub assíncrono.
EXEMPLO
const handlers = new Map();
export async function publish(evento, dados) {
const fns = handlers.get(evento) || [];
await Promise.allSettled(fns.map(fn => fn(dados)));
}SOBRE O CONCEITO
O padrão pub/sub (publisher/subscriber) permite desacoplar produtores e consumidores de eventos. Aqui, usamos um Map para armazenar arrays de funções associadas a cada nome de evento. No método publish, recuperamos os handlers e usamos Promise.allSettled para executá-los de forma assíncrona, aguardando a conclusão de todos — mesmo que alguns falhem. O erro comum é não usar await nessa chamada, o que faria o publish retornar imediatamente sem esperar os handlers, potencialmente deixando operações incompletas ou causando rejeições não tratadas. Como o sistema é assíncrono, é crucial que publish seja uma função async e que o Promise.allSettled seja aguardado com await.
RESOLUÇÃO