javascript - react - ¿Hay alguna manera de verificar si una var está usando setInterval()?
setinterval mdn (6)
Por ejemplo, estoy estableciendo un intervalo como
timer = setInterval(fncName, 1000);
y si voy y hago
clearInterval(timer);
aclara el intervalo, pero ¿hay alguna manera de verificar que haya despejado el intervalo? He intentado obtener el valor mientras tiene un intervalo y cuando no, pero ambos parecen ser números.
Hice esto como a continuación, Mi problema fue resuelto. debe establecer el valor como "falso" cuando borre el tiempo del temporizador.
var timeer=false;
----
----
if(timeer==false)
{
starttimer();
}
-----
-----
function starttimer()
{
timeer=setInterval(activefunction, 1000);
}
function pausetimer()
{
clearTimeout(timeer);
timeer=false;
}
La solución a este problema: crea un contador global que se incrementa dentro de tu código realizado por setInterval. Luego, antes de recuperar setInterval, prueba si el contador está SIEMPRE incrementándose. Si es así, su setInterval aún está activo. Si no, estás listo para ir.
Los valores de retorno de setTimeout
y setInterval
son valores completamente opacos. No puedes derivar ningún significado de ellos; el único uso para ellos es volver a clearTimeout
y clearInterval
.
No hay función para probar si un valor corresponde a un tiempo de espera / intervalo activo, ¡lo siento! Si querías un temporizador cuyo estado pudieras verificar, tendrías que crear tus propias funciones de contenedor que recordaran el estado definido / borrado.
Muchas respuestas complicadas, este método funciona bien para mí:
if (typeof timer == ''undefined'')
{
//timer has been cleared
}
No hay una manera directa de hacer lo que estás buscando. En cambio, puede configurar el timer
en falso cada vez que llame a clearInterval
:
// Start timer
var timer = setInterval(fncName, 1000);
// End timer
clearInterval(timer);
timer = false;
Ahora, el timer
será falso o tendrá un valor en un momento dado, por lo que simplemente puede verificar con
if (timer)
...
Si quieres encapsular esto en una clase:
function Interval(fn, time) {
var timer = false;
this.start = function () {
if (!this.isRunning())
timer = setInterval(fn, time);
};
this.stop = function () {
clearInterval(timer);
timer = false;
};
this.isRunning = function () {
return timer !== false;
};
}
var i = new Interval(fncName, 1000);
i.start();
if (i.isRunning())
// ...
i.stop();
PODRÍA anular el método setInterval y agregar la capacidad para realizar un seguimiento de sus intervalos. Aquí hay un ejemplo no resuelto para delinear la idea. Solo funcionará en la ventana actual (si tiene varios, podría cambiar esto con la ayuda del objeto prototipo) y esto solo funcionará si anula las funciones ANTES de que se registren las funciones que le interesan.
var oldSetInterval = window.setInterval;
var oldClearInterval = window.clearInterval;
window.setInterval = function(func, time)
{
var id = oldSetInterval(func, time);
window.intervals.push(id);
return id;
}
window.intervals = [];
window.clearInterval = function(id)
{
for(int i = 0; i < window.setInterval.intervals; ++i)
if (window.setInterval.intervals[i] == id)
{
window.setInterval.intervals.splice(i, 1);
}
oldClearInterval(id);
}
window.isIntervalRegistered(id)
{
for(int i = 0; i < window.setInterval.intervals; ++i)
if (window.setInterval.intervals[i] == func)
return true;
return false;
}
var i = 0;
var refreshLoop = setInterval(function(){
i++;
}, 250);
if (isIntervalRegistered(refrshLoop)) alert(''still registered'');
else alert(''not registered'');
clearInterval(refreshLoop);
if (isIntervalRegistered(refrshLoop)) alert(''still registered'');
else alert(''not registered'');