Introducción
async/await hizo la programación asíncrona más intuitiva, pero puede ocultar problemas de rendimiento y errores.
Antipatrón 1: Serialización innecesaria
No uses await secuencial para tareas independientes. Usa Promise.all para ejecución en paralelo.
Antipatrón 2: Bloques try-catch anidados
El anidamiento profundo derrota el propósito de async/await. Usa un solo bloque try-catch al más alto nivel.
Antipatrón 3: async callbacks en forEach
forEach con async callback ejecuta los callbacks síncronamente. Usa for...of para secuencial o Promise.all con map para paralelo.
Antipatrón 4: Funciones async sin await
Declarar una función como async cuando solo contiene operaciones síncronas añade sobrecarga innecesaria de microtask.
Conclusión: combina tareas independientes con Promise.all, nunca uses forEach con callbacks asíncronos, evita try-catch anidados.

