¿Cómo puedo usar setInterval y clearInterval?

2 minutos de lectura

avatar de usuario
Raj

Considerar:

function doKeyDown(event) {
    switch (event.keyCode) {
    case 32:
        /* Space bar was pressed */
        if (x == 4) {
            setInterval(drawAll, 20);
        }
        else {
            setInterval(drawAll, 20);
            x += dx;
        }
        break;
    }
}

quiero llamar drawAll() una vezno creando un círculo esa llamada drawAll una y otra vez. ¿Debo usar un método recursivo para eso o debo usar clearInterval?

¿Cómo puedo usar clearInterval?

avatar de usuario
TJ Crowder

setInterval establece un periódico Temporizador. Devuelve un identificador que puede pasar a clearInterval para evitar que dispare:

var handle = setInterval(drawAll, 20);

// When you want to cancel it:
clearInterval(handle);
handle = 0; // I just do this so I know I've cleared the interval

En los navegadores, se garantiza que el identificador sea un número que no es igual a 0; por lo tanto, 0 hace un valor de indicador útil para “sin temporizador establecido”. (Otras plataformas pueden devolver otros valores; las funciones de temporizador de Node.js devuelven un objeto, por ejemplo).

Para programar una función para solamente dispara una vez, usa setTimeout en cambio. No seguirá disparando. (También devuelve un identificador que puede usar para cancelarlo a través de clearTimeout antes de que dispare esa única vez, si corresponde.)

setTimeout(drawAll, 20);

avatar de usuario
Josué – Pendo

claroIntervalo es una opción:

var interval = setInterval(doStuff, 2000); // 2000 ms = start after 2sec 
function doStuff() {
  alert('this is a 2 second warning');
  clearInterval(interval);
}

avatar de usuario
HynekS

Nota al margen: si desea usar funciones separadas para establecer y borrar el intervalo, la variable de intervalo debe ser accesible para todos ellos, en el alcance ‘global relativo’ o ‘un nivel superior’:

var interval = null;    

function startStuff(func, time) {
    interval = setInterval(func, time);
}

function stopStuff() {
    clearInterval(interval);
}

avatar de usuario
PJ3

solía Angular con Electrón.

En mi caso, setInterval devuelve un objeto Timer de Node.js. Que, cuando llamé clearInterval(timerobject)no funcionó.

Primero tuve que obtener la identificación y llamar. claroIntervalo:

clearInterval(timerobject._id)

Usar setTimeout(drawAll, 20) en cambio. Eso solo ejecuta la función una vez.

  • Muchas gracias, pero setTimeout está terminando el ciclo en cada punto, utilizo otro enfoque y funciona bien, function doKeyDown(event) { switch (event.keyCode) { case 32: /* Se presionó la barra espaciadora */ loop = setInterval (dibujarTodo, 20); si (x == 202) { x = 400; hilandero(); } descanso; } }

    – Raj

    24 de mayo de 2011 a las 10:10


  • no era la pregunta

    – El Onin

    15 de marzo de 2018 a las 6:05

  • Muchas gracias, pero setTimeout está terminando el ciclo en cada punto, utilizo otro enfoque y funciona bien, function doKeyDown(event) { switch (event.keyCode) { case 32: /* Se presionó la barra espaciadora */ loop = setInterval (dibujarTodo, 20); si (x == 202) { x = 400; hilandero(); } descanso; } }

    – Raj

    24 de mayo de 2011 a las 10:10


  • no era la pregunta

    – El Onin

    15 de marzo de 2018 a las 6:05

¿Ha sido útil esta solución?