Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
No desenvolvimento em Node.js, é comum tentarmos encadear funções assíncronas usando await, mas é importante lembrar que o uso fora de uma função marcada como async pode gerar comportamentos inesperados.
No exemplo clássico, um desenvolvedor tenta fazer uma cadeia de funções assíncronas com condições que podem interromper o fluxo, mas acaba se deparando com comportamentos confusos, que parecem contrariar o que determina a especificação do JavaScript. A decisão fica mais saudável quando o time consegue medir o impacto depois.
A dica é sempre garantir que o await esteja dentro de uma função async. Caso contrário, o código pode não esperar o resultado corretamente, levando a bugs difíceis de rastrear, principalmente em operações condicionais ou com múltiplas dependências. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
Na prática, muitos esquecem que await fora de uma função async simplesmente não funciona, e isso causa aquele comportamento estranho que parece não seguir o que a documentação afirma. Além disso, é importante testar cada parte do encadeamento isoladamente para entender as possíveis consequências de cada condição. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta.
Se vocês já passaram por isso, sabem que o maior problema é o tempo gasto tentando descobrir por que o código não se comporta como esperado. Como vocês têm lidado com esse tipo de armadilha na rotina? Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
No meu caso, sempre tento deixar claro na revisão se o await está no escopo certo. Uma dica que ajuda é usar funções inline só quando necessário, assim evita esse tipo de confusão.
Verdade, já passei por isso várias vezes. A maioria dos problemas vem de esquecer que await precisa estar dentro de uma função async. Depois que acostuma, o erro vira mais fácil de detectar.
No meu time, a gente incentiva o uso de funções específicas pra lidar com esse fluxo, assim o entendimento fica mais claro. Uma questão que sempre surge é como lidar com erros nesse encadeamento.
Acho que o grande lance é entender que await é uma promessa de que a operação vai completar antes de seguir. Fora de uma função async, isso vira uma brincadeira de gato e rato, né?