devterview_$ iniciar simulação

Erro não tratado: rejection, exception e o processo que morre

DifícilSêniorTratamento de erro

Pergunta

Qual a diferença entre `uncaughtException` e `unhandledRejection` no Node, e por que capturar esses eventos e 'seguir em frente' é perigoso?

Resposta esperada

`uncaughtException`: um erro síncrono estourou até o topo sem ser capturado. `unhandledRejection`: uma Promise rejeitou e nenhum `.catch`/`try-await` a tratou. Você PODE registrar handlers pros dois, mas usá-los pra 'engolir o erro e continuar rodando' é perigoso: depois de um erro não tratado, o processo pode estar num estado inconsistente (uma transação pela metade, um lock não liberado, memória corrompida), e continuar servindo requisições em cima disso gera bugs difusos piores que um crash. A prática recomendada: no handler, logar com contexto, disparar métrica/alerta, tentar um graceful shutdown (parar de aceitar conexões, drenar as em andamento) e deixar o processo MORRER — um supervisor (systemd, Kubernetes, PM2) o reinicia limpo. `unhandledRejection` em versões recentes do Node já derruba o processo por padrão, o que é o comportamento certo.

Por que perguntam isso

Pergunta pleno/sênior de Node. O anti-padrão a reconhecer: handler que engole o erro e mantém o processo. Conecta com graceful shutdown.

#uncaught-exception#unhandled-rejection#graceful-shutdown
publicidade

Relacionadas