Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

212
Views
Establecer el tiempo de espera sin disminuir el valor del parámetro

Estoy tratando de hacer que mi función setTimeout sea reutilizable. Pero cada vez que paso el valor de remainingTime , no disminuye.

console.log(remainingTime); devuelve repetidamente 99 en lugar de disminuir, es decir, 98 , 97 .

¿Algunas ideas?

 let remainingTimeToSolveQuiz = 100; const timeRemainingEl = document.querySelector("#time-remaining"); function quizCountDown(remainingTime, elementToDisplayTime) { remainingTime--; console.log(remainingTime); if (remainingTime === 0) { // something clearTimeout(timer); } elementToDisplayTime.textContent = remainingTime; } let quizTimer = setInterval(quizCountDown, 1000, remainingTimeToSolveQuiz, timeRemainingEl);
 <div> Time: <span id="time-remaining"></span> </div>

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Estás pasando el valor inicial de remainingTimeToSolveQuiz a setInterval . Esto se pasa por valor, por lo que no cambia con cada ciclo.

Básicamente, cada vez que se ejecuta la función quizCountDown , se utiliza el valor inicial de 100 en lugar del valor actualizado.

Elimine el remainingTimeToSolveQuiz de TimeToSolveQuiz pasado al intervalo y, en su lugar, use la variable real dentro de su función quizCountDown .

También asegúrese de que su variable quizTimer esté inicializada y que la haga referencia correctamente en clearTimeout .

 let quizTimer; function quizCountDown(elementToDisplayTime) { remainingTimeToSolveQuiz--; console.log(remainingTime); if (remainingTimeToSolveQuiz === 0) { // something clearTimeout(quizTimer); } elementToDisplayTime.textContent = remainingTimeToSolveQuiz; } quizTimer = setInterval(quizCountDown, 1000, timeRemainingEl);

Como nota al margen, realmente no recomiendo usar setInterval o setTimeout si desea medir el tiempo con precisión. Siempre será una aproximación.

Si establece un intervalo de 1000 ms, siempre estará un par de milisegundos apagado, lo que puede sumar grandes imprecisiones durante un período de tiempo más largo.

Un enfoque más eficaz sería utilizar marcas de tiempo para calcular el tiempo transcurrido desde un punto de partida inicial almacenado.

about 4 years ago · Juan Pablo Isaza Report

0

Su setInterval está llamando a la función cada segundo. Cada vez que se llama, está pasando los mismos parámetros, uno de los cuales es un valor de 100 . Entonces, cada vez que se llama a su función, está pasando 100 y su función hace lo que se le pide que haga, reste 1. Es por eso que ve que 99 se repite.

Solución: Una variable global para controlar el tiempo:

 let quizTime = 100; // global variable stores the quiz time const timeRemainingEl = document.querySelector("#time-remaining"); let quizTimer; function quizCountDown(elementToDisplayTime) { if (quizTime === 0) { // something clearTimeout(quizTimer); } elementToDisplayTime.textContent = quizTime; console.log(quizTime); quizTime--; // Calling this last starts your quiz timer with 100 } quizTimer = setInterval(quizCountDown, 1000, timeRemainingEl);
 <div> Time: <span id="time-remaining"></span> </div>

Además, ayuda llamar a quizTime-- last. Porque entonces su temporizador mostrará 100 inicialmente.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!