2010-09-28 14 views

Odpowiedz

8

można przechowywać interwał identyfikator i wyczyścić go poprzez clearInterval() np

var timer = setInterval(myFunction, 1000); 

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

Lub jeśli możesz po prostu zadzwonić pod numer clearInterval(), gdzie ustawienie warunku, więc następny okres nie działa, nie mając logiki dla tego w samej funkcji.

0

Jeśli zapytasz, jak zatrzymać wywołanie funkcji, które zostało ustawione za pomocą setInterval(), po prostu użyj clearInteval() function. najpierw trzeba zapisać referencję do funkcji setInterval i nie korzystać z tego odniesienie do zatrzymania przedziale:

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

Tak, ale ** ** nie używać znaków, należy użyć rzeczywistej wartości zadanej funkcji. –

4

clearInterval zatrzymuje powtórki z setInterval, używając identyfikatora zwrócony przez setInterval: Odpowiedź

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

Spowoduje to, że po raz ostatni uruchomi się przed zatrzymaniem, czek musi znajdować się na początku funkcji. –

+1

Tak. W zależności od tego, gdzie obliczany jest warunek przerwania, może to być coś, co chcesz. – kevingessner

0

Nicka działa idealnie. Wyciągnąłem go przez powrót obietnicę

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; 
} 

i można wywołać go jak tak

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

    }); 
Powiązane problemy