Así que necesito un poco de retraso en mi JavaScript para una función dentro de un ciclo que debería llamarse cada 500 ms:
function myFunc(num) { return num++; } var theNum = 0; while (theNum != 10) { theNum = setTimeout(myFunc(theNum), 500); } console.log("All done"); Sin embargo, All done nunca se registra.
Estás llamando a la función inmediatamente. En su lugar, debe pasar la referencia de función a setTimeout .
Y también estás creando un bucle infinito debido a ese problema.
Incluso si corrige este problema, "Todo listo" aún se registrará primero antes de que se complete cualquiera de los tiempos de espera.
Así que necesitas repensar el enfoque. Ponga el tiempo de espera en una función y si theNum es menor que 10, vuelva a llamar a la función con el número incrementado ( setTimeout le permite pasar argumentos después del retraso). Registre "Todo listo" cuando el conteo llegue a 10.
function myFunc(num) { return `Number: ${num}`; } function loop(theNum = 0) { if (theNum < 10) { console.log(myFunc(theNum)); setTimeout(loop, 500, ++theNum); } else { console.log("All done"); } } loop();