Alojé mi aplicación en Heroku y quiero detener la función setInterval en una determinada condición. Funciona bien en mi computadora local pero no en Heroku. En Heroku, mi función "updateLine()" todavía se llama tres veces después de que se cumple la condición newEndX >= 800 y se llama a clearInterval(intervalID) ;
¿Por qué se sigue llamando a "updateLine()" y por qué tres veces? ¿Heroku funciona de manera diferente a nuestra computadora local?
intervalID = setInterval(function () { if (newEndX < 800) { updateLine(); } if (newEndX >= 800) { clearInterval(intervalID); alert("You reached the end of the canvas. Please click 'reset' button to startover.") console.log("reached the end of the canvas.") console.log("The final startX is", newStartX); console.log("The final endX is", newEndX); } }, 200);Actualización: el problema probablemente se deba a algunos problemas desconocidos en Heroku o en mi navegador. Este código funciona bien en la computadora de mis compañeros de clase y en su página de Heroku.
No tengo idea de qué podría causar la diferencia entre la máquina local y Heroku, pero tal vez la función setTimeout se ajuste mejor a este caso de uso y pueda resolver el problema.
setTimeout llama a una función una vez después de un retraso. Pero la función puede tener una verificación de la condición y configurar setTimeout para llamarse a sí mismo nuevamente si la condición pasa o simplemente salir si falla.
La llamada setTimeout se puede usar en lugar de la llamada setInterval en su ejemplo de esta manera:
function periodicFunction() { // do something // should be called again? -> setTimeout if (newEndX < 800) { updateLine(); setTimeout(periodicFunction, 200); // otherwise just finish the work without calling setTimeout } else { alert("You reached the end of the canvas. Please click 'reset' button to startover.") console.log("reached the end of the canvas.") console.log("The final startX is", newStartX); console.log("The final endX is", newEndX); } } // initial call setTimeout(periodicFunction, 200);setInterval es una función de JavaScript que forma una cola para las solicitudes. No se detiene incluso si ocurre un error hasta que obtiene clearInterval. Esto se debe al temporizador interno del navegador y al retraso en las solicitudes que setInterval tiene en cola.
Si la demora aumenta, setInterval no se detendrá y llamará a la función una y otra vez.