Estoy aprendiendo node.js y estoy confundido acerca de cómo funciona async. Tengo entendido que Array.foreach está bloqueando, pero luego el siguiente código no funciona como se esperaba.
testfunc.ts:
export const testfunc = async (numArray: number[]) => { let count = 0; numArray.forEach(async (elem) => { if (elem % 2 === 0) { await new Promise((r) => setTimeout(r, 2000)); console.log(elem); count = count + 1; } }); console.log(`printed ${count}`); };enviarmensaje.ts:
import { testfunc } from "./testfunc"; const callTestFunc = async () => { await testfunc([1, 2, 3, 4, 5, 6]); }; callTestFunc();Esperaba una salida de:
2 4 6 printed 3Pero, estoy recibiendo
printed 0 2 4 6¿Puede alguien explicarme esto?
Con forEach , haces tus cosas en una función de devolución de llamada y esta devolución de llamada lleva algunas veces. Así que es asíncrono.
En consecuencia, forEach no se puede usar para tareas sincrónicas.
Esto también es lo mismo para un bucle for que está llamando a una función que es asíncrona. Por ejemplo, si ejecuta una consulta SQL INSERT dentro de un bucle for, no puede estar seguro de que INSERT se ejecute en el orden del bucle.