Gibt es eine JavaScript-Methode ähnlich der jQuery delay()
oder wait()
(um die Ausführung eines Skripts um einen bestimmten Zeitraum zu verzögern)?
javascript
settimeout
Niyaz
quelle
quelle
function_reference
sei denn, Sie schließen ein()
. Dhfunction_reference
ist genau das - eine Referenz; Das Übergebenfunction_reference()
würde die Funktion sofort aufrufen.Nur um das zu ergänzen, was alle anderen gesagt haben
setTimeout
: Wenn Sie in Zukunft eine Funktion mit einem Parameter aufrufen möchten, müssen Sie einige anonyme Funktionsaufrufe einrichten.Sie müssen die Funktion als Argument übergeben, damit sie später aufgerufen werden kann. In der Tat bedeutet dies ohne Klammern hinter dem Namen. Im Folgenden wird die Warnung sofort aufgerufen und "Hallo Welt" angezeigt:
Um dies zu beheben, können Sie entweder den Namen einer Funktion eingeben (wie es Flubba getan hat) oder eine anonyme Funktion verwenden. Wenn Sie einen Parameter übergeben müssen, müssen Sie eine anonyme Funktion verwenden.
Wenn Sie diesen Code ausführen, werden Sie feststellen, dass das Popup nach 2 Sekunden "Hallo Stapelüberlauf" anzeigt. Dies liegt daran, dass sich der Wert der Variablen a in diesen zwei Sekunden geändert hat. Damit nach zwei Sekunden "Hallo Welt" angezeigt wird, müssen Sie den folgenden Codeausschnitt verwenden:
Es wird 2 Sekunden warten und dann 'Hallo Welt' erscheinen.
quelle
Nur um ein wenig zu erweitern ... Sie können Code direkt im
setTimeout
Aufruf ausführen , aber wie @patrick sagt, weisen Sie normalerweise eine Rückruffunktion wie diese zu. Die Zeit ist Millisekundenquelle
Wenn Sie wirklich eine blockierende (synchrone)
delay
Funktion haben möchten (für was auch immer), warum nicht so etwas tun:quelle
delay
aktualisieren kann (um diese Frage zu beantworten ). Gibt es eine Möglichkeit dazu?Sie müssen setTimeout verwenden und ihm eine Rückruffunktion übergeben. Der Grund, warum Sie Sleep in Javascript nicht verwenden können, ist, dass Sie die gesamte Seite in der Zwischenzeit daran hindern würden, etwas zu tun. Kein guter Plan. Verwenden Sie das Ereignismodell von Javascript und bleiben Sie glücklich. Kämpfe nicht dagegen an!
quelle
Sie können auch window.setInterval () verwenden , um in regelmäßigen Abständen wiederholt Code auszuführen.
quelle
setTimeout()
macht es einmal,setInterval()
macht es wiederholt. Wenn Sie möchten, dass Ihr Code alle 5 Sekunden ausgeführt wird,setInterval()
ist dies für den Job vorgesehen.Um die früheren Kommentare zu ergänzen, möchte ich Folgendes sagen:
Die
setTimeout()
Funktion in JavaScript unterbricht die Ausführung des Skripts nicht per se, sondern weist den Compiler lediglich an, den Code irgendwann in der Zukunft auszuführen.Es gibt keine Funktion, die die in JavaScript integrierte Ausführung anhalten kann. Sie können jedoch Ihre eigene Funktion schreiben, die so etwas wie eine bedingungslose Schleife ausführt, bis die Zeit erreicht ist, indem Sie die
Date()
Funktion verwenden und das benötigte Zeitintervall hinzufügen.quelle
Wenn Sie nur eine Verzögerung testen müssen, können Sie Folgendes verwenden:
Und wenn Sie dann um 2 Sekunden verzögern möchten, tun Sie Folgendes:
Könnte aber nicht das Beste für die Produktion sein. Mehr dazu in den Kommentaren
quelle
Warum kannst du den Code nicht hinter ein Versprechen setzen? (tippte oben auf meinem Kopf ein)
quelle
Die einfache Antwort lautet:
Die obige Funktion wartet 1 Sekunde (1000 ms) und setzt dann x auf 1. Offensichtlich ist dies ein Beispiel; Innerhalb der anonymen Funktion können Sie alles tun, was Sie wollen.
quelle
Die Erklärung von Maurius (höchste positive Antwort) mit den drei verschiedenen Anrufmethoden hat mir sehr gut gefallen
setTimeout
.In meinem Code möchte ich nach Abschluss eines AJAX-Speicherereignisses automatisch zur vorherigen Seite navigieren. Der Abschluss des Speicherereignisses enthält eine leichte Animation im CSS, die angibt, dass das Speichern erfolgreich war.
In meinem Code habe ich einen Unterschied zwischen den ersten beiden Beispielen gefunden:
Dieser wartet nicht auf das Timeout - das back () wird fast sofort aufgerufen, egal welche Nummer ich für die Verzögerung eingegeben habe.
Ändern Sie dies jedoch in:
Das macht genau das, was ich mir erhofft hatte.
Dies ist nicht spezifisch für die back () -Operation, dasselbe passiert mit
alert()
. Grundsätzlich wird bei deralert()
im ersten Fall verwendeten die Verzögerungszeit ignoriert. Wenn ich das Popup schließe, wird die Animation für das CSS fortgesetzt.Daher würde ich die zweite oder dritte Methode empfehlen, die er beschreibt, auch wenn Sie integrierte Funktionen verwenden und keine Argumente verwenden.
quelle
Ich hatte einige Ajax-Befehle, die ich mit einer Verzögerung dazwischen ausführen wollte. Hier ist ein einfaches Beispiel für einen Weg, dies zu tun. Ich bin bereit, für meinen unkonventionellen Ansatz in Stücke gerissen zu werden. :) :)
Sie können den Codeblock kopieren und in ein Konsolenfenster einfügen und Folgendes sehen:
quelle
Die einfachste Lösung, um Ihre Funktion mit Verzögerung aufzurufen, ist:
quelle
Verzögerungsfunktion:
Verwendung innerhalb der
async
Funktion:quelle
Wie bereits erwähnt, ist setTimeout Ihre sicherste Wahl.
Manchmal können Sie die Logik jedoch nicht von einer neuen Funktion trennen. Dann können Sie Date.now () verwenden, um Millisekunden abzurufen und die Verzögerung selbst durchzuführen.
quelle