it-swarm.com.de

Wie setInterval und clearInterval verwenden?

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

Hallo zusammen,

Ich möchte drawAll() einmal aufrufen, ohne eine loop zu erstellen, die drawAll immer wieder aufruft, sollte ich dafür eine rekursive Methode verwenden oder soll ich clearInterval verwenden?

Bitte sagen Sie mir auch, dass ich clearInterval verwenden soll. Vielen Dank :)

109
Raj

setInterval richtet einen wiederkehrenden Timer ein. Es gibt ein Handle zurück, das Sie an clearInterval übergeben können, um das Auslösen zu verhindern:

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

In Browsern ist das Handle garantiert eine Zahl ungleich 0; deshalb, 0 ist ein praktischer Flag-Wert für "kein Timer eingestellt". (Andere Plattformen geben möglicherweise andere Werte zurück. Die Timer-Funktionen von NodeJS geben beispielsweise ein Objekt zurück.)

Verwenden Sie stattdessen setTimeout, um festzulegen, dass eine Funktion nur einmal ausgelöst wird. Es wird nicht weiter schießen. (Es gibt auch ein Handle zurück, mit dem Sie es über clearTimeout abbrechen können, bevor es gegebenenfalls einmal ausgelöst wird.)

setTimeout(drawAll, 20);
175
T.J. Crowder

clearInterval ist eine Option:

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

Verwenden Sie stattdessen setTimeout(drawAll, 20). Das führt die Funktion nur einmal aus.

10
dlev

Ich habe angular mit Elektron,

In meinem Fall gibt setInterval ein Nodejs Timer-Objekt zurück. was, als ich clearInterval(timerobject) aufrief, nicht funktionierte.

Ich musste zuerst die ID abrufen und bei clearInterval anrufen

clearInterval(timerobject._id)

Ich habe viele Stunden damit gekämpft. hoffe das hilft.

3
PJ3

Randnotiz - Wenn Sie separate Funktionen zum Setzen und Löschen von Intervallen verwenden möchten, muss die Intervallvariable für alle von ihnen zugänglich sein, entweder im Bereich "relativ global" oder "eine Ebene höher":

var interval = null;    

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

function stopStuff() {
    clearInterval(interval);
}
1
HynekS