Wie starte ich die setInterval-Schleife sofort? [duplicate]

Lesezeit: 2 Minuten

Benutzer-Avatar
Googlebot

In einem einfachen setInterval

setInterval(function() {
      // Do something every 9 seconds
}, 9000);

Die erste Aktion erfolgt nach 9 Sekunden (t=9s). So zwingen Sie die Schleife, die erste Aktion sofort auszuführen (t=0)?

Ich denke, es liegt am Mechanismus von setInterval haben Delay - Action - Delay - Action ... Schleife; Anstatt von Action - Delay - Action - Delay ... Schleife.

BEARBEITEN: Meine Funktion ist ja eine Schleife als

setInterval(function(){
$('.test').each(function(idx){
    var duration = 1000;
    $(this).delay(duration*idx);
    Some stuff here
});
}, 4000);

  • Wer Event-JavaScript hasst, hasst den DRY-Principal.

    – Lauf_das_Rennen

    4. Februar um 13:11 Uhr

Benutzer-Avatar
Salmann A

Halte es einfach. Sie können eine benannte Funktion anstelle einer anonymen Funktion verwenden; Rufen Sie es auf und legen Sie ein Intervall dafür fest.

function doSomething() {
    console.log("tick");
}
doSomething();
setInterval(doSomething, 9000);

Erstellen Sie bei Bedarf einen Bereich:

(function() {
    function doSomething() {
        console.log("tick");
    }
    doSomething();
    setInterval(doSomething, 9000);
})();

Schließlich funktioniert Folgendes, ohne zu erstellen oder zu beeinflussen x:

setInterval(function x() {
    console.log("tick");
    return x;
}(), 9000);

  • Der erste Teil dieser Antwort wird als neu immer langsamer setInterval wird jede Schleife gemacht. Dies könnte durch Austausch behoben werden window.setInterval mit setTimeout.

    – Jakob Birkett

    7. Januar 2018 um 22:57 Uhr

  • Ich frage mich, wie das 2. Beispiel mit einer Lambda-Funktion funktionieren würde?

    – ESP32

    8. Januar 2019 um 21:54 Uhr

Manchmal verwende ich dieses Muster …

(function me() {
    // Do something every 9 seconds

    setTimeout(me, 9000);
})();

Es ist nicht ganz dasselbe, da es bis zum warten wird etwas tun wird ausgeführt, bevor ~9 Sekunden gewartet wird, um es erneut aufzurufen. Dies ist jedoch oft nützlich, damit sich Ereignisse in der Ereigniswarteschlange nicht unnötig stapeln (es ist jedoch unwahrscheinlich, dass ein Code 9 Sekunden zum Ausführen benötigt 🙂

Beachten Sie, dass in älteren IEs die me wird nach außen durchsickern.

  • “Beachten Sie, dass in älteren IEs das me in den äußeren Bereich gelangt.” Und zwei verschiedene Funktionen werden zu unterschiedlichen Zeiten mit demselben Code erstellt. Das Erste Wenn Ihr Code ausgeführt wird, ist es einer von ihnen; alle folgenden Male ist es das andere. Seltsam aber wahr.

    – TJ Crowder

    12. Mai 2012 um 11:54 Uhr

  • Ich wünschte, dies funktionierte nahtlos in allen Browsern. Es ist einfach so sauber. Welche Versionen von IE funktionieren nicht?

    – der König der Wahrheit

    13. Dezember 2013 um 23:48 Uhr

  • @thekingoftruth Es sollte Arbeit nahtlos, es wird einfach auslaufen me Kennung im IE. Aus dem Gedächtnis ist es <= IE8, das ein Problem hat.

    – Alex

    14. Dezember 2013 um 7:11 Uhr

  • @alex damit kann ich leben. 🙂 Ich frage mich, ob (var me = function(){... würde auch funktionieren. edit: ah, ich sehe, dass es nicht geht.

    – der König der Wahrheit

    17. Dezember 2013 um 23:35 Uhr


  • @thekingoftruth var <name> = <something> ist undefinedwohingegen <name> = <something> ist <name> (was effektiv gleich ist <something>. Sie können also tun var me; (me = function() { … })().

    – Iso

    21. Februar 2014 um 14:46 Uhr

setInterval() ist eine wirklich hässliche Funktion. Ich verwende diese bereinigte Version, die die Funktion sofort aufruft und vor dem Funktionsparameter eine Zeit in Sekunden benötigt, sodass der Aufruf mit einer Inline-Funktionsdefinition tatsächlich sinnvoll erscheint.

function startInterval(seconds, callback) {
  callback();
  return setInterval(callback, seconds * 1000);
}

  • Wenn callback clearInterval() aufruft, wird das Intervall beim ersten Aufruf mit dieser Implementierung immer nicht gelöscht. Was funktionieren würde ist: const id = setInterval(...); setTimeout(callback); return id; Dadurch wird sichergestellt, dass die intervalId im ersten Callback-Aufruf nicht undefiniert ist

    – Areeb

    10. Mai 2021 um 19:09 Uhr


Verwenden Sie eine benannte Funktion, rufen Sie sie auf und weisen Sie sie dem Intervall zu.

var myFnc = function() {
    // Do something every 9 seconds
};
setInterval(myFnc, 9000);
myFnc();

Die andere Möglichkeit besteht darin, stattdessen setTimeout zu verwenden.

var myFnc = function() {
    // Do something every 9 seconds
    setTimeout(myFnc, 9000);
};
myFnc();

1145790cookie-checkWie starte ich die setInterval-Schleife sofort? [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy