Estoy tratando de obtener el tiempo para mostrar en la terminal, bastante simple. Quiero que cada console.log sea un segundo diferente. En lugar de ejecutar un ciclo while infinito como un neandertal, quería que el nodo js esperara un segundo antes de ejecutar la función. Sin embargo, esto no parece funcionar, ya que sigue imprimiendo el mismo tiempo una y otra vez durante quizás un par de segundos, y luego obtengo un RangeError porque superé el tamaño de la pila de llamadas (lo que sea que eso signifique). Copié esto del código de trabajo en una aplicación JavaScript/HTML que hice, que funciona perfectamente, pero supongo que a node no le gusta algo. ¿Ideas?
function addZeroes(num) { if (num < 10) { var new_num = "0" + num } else { var new_num = num } return new_num } function timeClock(){ var refresh=1000; // Refresh rate in milli seconds mytime = setTimeout(timeDisplay() , {}, refresh) } function timeDisplay() { //creating elements rightNow = new Date(); minute = rightNow.getMinutes(); hour = rightNow.getHours(); seconds = rightNow.getSeconds(); theTime = "" theTime += addZeroes(hour) + ":" + addZeroes(minute) + ":" + addZeroes(seconds); //displaying elements console.log(theTime) timeClock() } timeDisplay()Supongo que la primera función es irrelevante para el problema, pero no lo sé en este momento.
Para esto, no desea usar setTimeout sino setInterval .
Código de ejemplo:
function addZeroes(num) { let new_num; if (num < 10) { new_num = "0" + num } else { new_num = num } return new_num } function timeClock(){ const refresh=1000; // Refresh rate in milli seconds let mytime = setInterval(timeDisplay, refresh) } function timeDisplay() { //creating elements let rightNow = new Date(); let minute = rightNow.getMinutes(); let hour = rightNow.getHours(); let seconds = rightNow.getSeconds(); let theTime = ""; theTime += addZeroes(hour) + ":" + addZeroes(minute) + ":" + addZeroes(seconds); //displaying elements console.log(theTime); } timeClock();Si su objetivo final es más grande que imprimir en la terminal, recomendaría trabajar con bibliotecas como dayjs o momentjs , que tienen numerosas funciones auxiliares en lugar de agregar ceros.
EDITAR: probablemente también desee finalizar la ejecución de esta función mediante programación. Para este asunto, use clearInterval() con su variable myTime como parámetro.