He estado desconcertado sobre esto por un día o dos. Estoy tratando de crear un temporizador y extraje parte del código. No puedo entender por qué cuando registro la variable minutos o segundos , el valor sigue siendo 0. No cambia aunque las variables son variables globales. ¡Muchas gracias!
let totalTime = 0; let minutes = Math.floor(totalTime / 60); let seconds = totalTime % 60; function countTime() { return totalTime += 1; } function startCount() { countInt = setInterval(countTime, 1000); } startCount() console.log(seconds); // Why does the output stay 0? 🤔Yo lo haría así:
var totalTime = 0; var minutes, seconds; function startTimer(){ let countInt = setInterval(() => { totalTime++; }, 1000); } function updateTimeData(){ minutes = Math.floor(totalTime / 60); seconds = totalTime % 60; } startTimer(); setTimeout(() => { updateTimeData(); console.log(seconds); }, 5000); El setTimeout es necesario si desea obtener los resultados correctos. JavaScript es asíncrono, por lo que el archivo console.log en su código se llama instantáneamente y no espera el setInterval (porque está fuera de la función setInterval).
Por si no lo sabes:
setTimeout funciona como setInterval, pero solo llama una vez
En su código, countTime() solo se ejecuta después de 1 segundo, pero el archivo console.log se ejecuta inmediatamente.
Prueba esto:
let totalTime = 0; let minutes = Math.floor(totalTime / 60); let seconds = totalTime % 60; function countTime() { // This will run every second totalTime += 1; minutes = Math.floor(totalTime / 60); seconds = totalTime % 60; console.log(minutes, seconds); // here you log after it has been updated. } function startCount() { countInt = setInterval(countTime, 1000); } startCount()