JavaScriptMódulos e Errosavancado

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

Mais exercícios de Módulos e Erros

JSM003 · BásicoTipos de erroJSM005 · BásicoError propertiesJSM006 · BásicoExport nomeadoJSM008 · BásicoImport * as
Ver todos os exercícios de JavaScript