559 Stimmen

Ausführen der Funktion setInterval ohne Verzögerung beim ersten Mal

Es gibt eine Möglichkeit, die setInterval Methode von javascript, um die Methode sofort auszuführen, und wird dann mit dem Timer ausgeführt

5voto

Polyducks Punkte 193

Hier ist eine einfache Version für Anfänger, die nicht so viel herumprobieren muss. Sie deklariert lediglich die Funktion, ruft sie auf und startet dann das Intervall. Das war's.

//Declare your function here
function My_Function(){
  console.log("foo");
}    

//Call the function first
My_Function();

//Set the interval
var interval = window.setInterval( My_Function, 500 );

3voto

Jayant Varshney Punkte 1668

Ich schlage vor, die Funktionen in der folgenden Reihenfolge aufzurufen

var _timer = setInterval(foo, delay, params);
foo(params)

Sie können auch die _timer zum foo, wenn Sie das wollen clearInterval(_timer) unter einer bestimmten Bedingung

var _timer = setInterval(function() { foo(_timer, params) }, delay);
foo(_timer, params);

3voto

jimm101 Punkte 898

Es gibt ein praktisches npm-Paket namens erstesIntervall (um ganz offen zu sein, es ist meins).

Viele der Beispiele hier beinhalten keine Parameterbehandlung, und das Ändern des Standardverhaltens von setInterval in jedem großen Projekt ist schlecht. Aus den Unterlagen:

Dieses Muster

setInterval(callback, 1000, p1, p2);
callback(p1, p2);

ist identisch mit

firstInterval(callback, 1000, p1, p2);

Wenn Sie die alte Schule des Browsers bevorzugen und die Abhängigkeit nicht wollen, ist es ein einfaches Ausschneiden und Einfügen von den Code.

3voto

Denn jemand muss das Äußere mitbringen this als ob es eine Pfeilfunktion wäre.

(function f() {
    this.emit("...");
    setTimeout(f.bind(this), 1000);
}).bind(this)();

Wenn Sie der oben beschriebene Müll stört, können Sie stattdessen einen Verschluss machen.

(that => {
    (function f() {
        that.emit("...");
        setTimeout(f, 1000);
    })();
})(this);

Oder erwägen Sie vielleicht die Verwendung von die @autobind Tapezierer abhängig von Ihrem Code.

3voto

reo_yamanaka Punkte 21

Sie können eine sehr kleine Anfangsverzögerungszeit einstellen (z.B. 100) und diese innerhalb der Funktion auf die gewünschte Verzögerungszeit einstellen:

var delay = 100;

function foo() {
  console.log("Change initial delay-time to what you want.");
  delay = 12000;
  setTimeout(foo, delay);
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X