Erro em handler async que não chega no error handler
Pergunta
No Express 4, por que um erro lançado dentro de um handler `async` não cai no error middleware, e como resolver?
Resposta esperada
O Express 4 só captura erros lançados de forma síncrona ou passados explicitamente via `next(err)`. Um handler `async` que dá `throw` (ou tem uma promise rejeitada) rejeita a promise retornada — que o Express 4 ignora — então o erro vira um 'unhandled rejection' e a requisição fica pendurada até o timeout. Soluções: chamar `next(err)` no `catch`; envolver o handler num wrapper `asyncHandler(fn) => (req,res,next) => Promise.resolve(fn(req,res,next)).catch(next)`; usar uma lib como `express-async-errors`; ou migrar pro Express 5, que passou a encaminhar rejeições de handler async pro error middleware automaticamente.
Por que perguntam isso
Pergunta pleno. Sinal de experiência: conhecer o wrapper `asyncHandler` e que o Express 5 corrige isso nativamente.