2010-09-28 30 views

Respuesta

8

Usted puede almacenar el ID de intervalo y desactivarla a través clearInterval(), por ejemplo

var timer = setInterval(myFunction, 1000); 

function myFunction() { 
    if(condition) { 
    clearInterval(timer); 
    return; 
    } 
    //do stuff 
} 

O si puede simplemente llamar al clearInterval() donde establece la condición, para que el siguiente intervalo no se ejecute, ya que no tiene lógica para esto en la función misma.

0

Si pregunta cómo detener una llamada de función que se ha configurado utilizando setInterval(), simplemente use clearInteval() function. Primero tiene que guardar una referencia a la función setInterval y de utilizar esta referencia para detener el intervalo:

var int=self.setInterval("your_function_name()",1000); 
if(condition){ 
    clearInterval(int) 
} 
+1

Sí, pero no ** ** utilizar una cadena, utilice la referencia de función real. –

4

clearInterval detiene la repetición de setInterval, utilizando el ID devuelto por setInterval: Respuesta

var interval = setInterval(function() { 
    // do your loop 
    if (loop_should_stop) { 
     clearInterval(interval); 
    } 
}, dt); 
+0

Esto daría como resultado que se ejecutara por última vez antes de detenerse, la verificación debe estar al principio de la función. –

+1

Sí. Dependiendo de dónde se calcule la condición de ruptura, esto podría ser lo que desee. – kevingessner

0

de Nick funciona perfectamente. Me extendí devolviendo una promesa

function checkUntil(conditionFunc, millisecondsInterval) { 
    var retryCount = 0; 
    var retryCountLimit = 100; 

    var promise = new Promise((resolve, reject) => { 
     var timer = setInterval(function() { 
      if (conditionFunc()) { 
       clearInterval(timer); 
       resolve(); 
       return; 
      } 
      retryCount++; 
      if (retryCount >= retryCountLimit) { 
       clearInterval(timer); 
       reject("retry count exceeded"); 
      } 
     }, millisecondsInterval); 
    }); 

    return promise; 
} 

y se puede invocar al igual que

checkUntil(function() { 
     return document.querySelector('body'); 
    }, 500).then(function() { 
      ... 
      ... 
     }); 

    }); 
Cuestiones relacionadas