2010-09-28 7 views

Antwort

8

Sie können das Intervall ID speichern und löschen es über clearInterval() zum Beispiel

var timer = setInterval(myFunction, 1000); 

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

Oder wenn Sie einfach clearInterval() aufrufen können, wo die Bedingung eingestellt ist, so dass das nächste Intervall nicht ausgeführt wird, keine Logik dafür in der Funktion selbst.

0

Wenn Sie fragen, wie Sie einen Funktionsaufruf stoppen können, der mit setInterval() eingestellt wurde, verwenden Sie einfach clearInteval() function. Sie müssen zuerst einen Verweis auf die setInterval-Funktion speichern und als diese Referenz verwenden, um das Intervall zu stoppen:

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

Ja, aber ** do ** keinen String verwenden, verwenden Sie die aktuelle Funktionsreferenz. –

4

clearInterval stoppt die Wiederholung von setInterval, durch setInterval die ID zurückgegeben werden:

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

Dies würde dazu führen, dass es vor dem Stoppen ein letztes Mal ausgeführt wird, der Check muss am Anfang der Funktion stehen. –

+1

Ja. Abhängig davon, wo die Abbruchbedingung berechnet wird, könnte dies das sein, was Sie wollen. – kevingessner

0

Antwort Nicks perfekt funktioniert. Ich erweiterte sie durch ein Versprechen

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

zurückkehren und Sie können es aufrufen wie so

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

    }); 
Verwandte Themen