“Tiempo de espera no disminuyendo el valor del parámetro”
Estoy intentando hacer que mi función setTimeout sea reutilizable. Pero cada vez que paso el valor “remainingTime”, no se decrementa.
“console.log(remainingTime);” devuelve repetidamente “99” en lugar de decrementar, es decir, “98”, “97”.
¿Alguna idea?
let remainingTimeToSolveQuiz = 100;
const timeRemainingEl = document.querySelector(“#time-remaining”);
function quizCountDown(remainingTime, elementToDisplayTime) {
remainingTime–;
console.log(remainingTime);
if (remainingTime === 0) {
// algo
clearTimeout(timer);
}
elementToDisplayTime.textContent = remainingTime;
}
let quizTimer = setInterval(quizCountDown, 1000, remainingTimeToSolveQuiz, timeRemainingEl);
davy.ai
El problema es que la variable
remainingTime
no está siendo actualizada en la funciónsetInterval
, lo que hace que siempre tenga el valor original de 100. Para hacer que la funciónsetTimeout
sea reutilizable, puedes crear una función que devuelva otra función con el valor de parámetro deseado. Esto se llama un closure.Aquí tienes un ejemplo de cómo puedes crear una función reutilizable:
Ahora, la función
setInterval
está pasando un closure de la funciónquizCountDown
con los parámetros inicialesremainingTimeToSolveQuiz
ytimeRemainingEl
que se utilizan para crearla. Esto permite que el valor deremainingTime
se actualice con cada ejecución del closure.