stop react español ejemplo detener javascript timer

javascript - react - ¿Está bien llamar a clearInterval dentro de un manejador setInterval?



setinterval react (3)

Tengo un fragmento de Javascript que comprueba una condición (a través de una llamada AJAX) cada n segundos. Si esa condición es verdadera, deja de verificarse. Lo he implementado de la siguiente manera:

var stopTimer; var timerId = setInterval(function() { /* Make Ajax Calls and set stopTimer */ if (stopTimer) { clearInterval(timerId); } }, 10000);

Sin embargo, encuentro un comportamiento errático: funciona a veces, pero en otros momentos, sigue comprobando para siempre. He comprobado que (en la medida de lo posible) no hay ningún error en ninguna parte del código.

Por lo tanto, sospecho que llamar a clearInterval dentro de un controlador setInterval podría ser el culpable. ¿Está bien? ¿Está bien llamar a clearInterval dentro de un manejador setInterval?

Gracias por su atención


Asegúrese de no reutilizar inadvertidamente el mismo nombre de temporizador en otro lugar de su código, lo que provocaría que siempre se detenga la definición del segundo temporizador.

O le da al temporizador un nombre único o lo adapta a una función

var timerForAjax = setInterval(function() { /* Make Ajax Calls and set stopTimer */ if (stopTimer) { clearInterval(timerForAjax); } }, 10000);

Fui lo suficientemente descuidado para llamar a mi interval temporizador y no me di cuenta de que estaba creando dos temporizadores en el mismo ámbito, ambos llamados interval . Culpó a iOS8 durante aproximadamente una hora hasta que me di cuenta de que no tenía nada que ver con eso.


Es seguro. Probablemente, el problema sea que stopTimer no se configure como esperabas.


No creo que haya ningún problema con su código a menos que la función AJAX sea errónea. Debe ocuparse de las devoluciones de llamada de éxito y error de la función AJAX para que no haya ningún problema con el ciclo no detenido.

También creo que constantemente está sondeando el servidor para obtener una respuesta y luego hacer las acciones apropiadas. Puede usar AJAX inverso para hacer este tipo de proceso.