Heim >Web-Frontend >js-Tutorial >Warum wird meine setTimeout()-Funktion sofort ausgeführt, obwohl eine Verzögerung eingestellt ist?

Warum wird meine setTimeout()-Funktion sofort ausgeführt, obwohl eine Verzögerung eingestellt ist?

Barbara Streisand
Barbara StreisandOriginal
2024-11-14 18:33:01533Durchsuche

Why is my setTimeout() function executing immediately, despite setting a delay?

Verzögerte Ausführung von Funktionsaufrufen mit setTimeout

In JavaScript wird setTimeout() verwendet, um die Ausführung einer Funktion zu einem späteren Zeitpunkt zu planen eine gängige Technik für die asynchrone Programmierung. Es gibt jedoch Fälle, in denen die Funktion sofort ausgeführt wird, obwohl sie mit einer Verzögerung geplant wurde. Das Verständnis der Feinheiten von setTimeout() ist für eine effektive asynchrone Ausführung von entscheidender Bedeutung.

Im bereitgestellten Kontext soll die Funktion crawl() die Funktion doRequest() in etwa 10-Sekunden-Intervallen aufrufen. Die Funktion wird jedoch sofort ausgeführt.

Der Schlüssel zum Verständnis dieses Problems liegt in der Syntax von setTimeout(). Wenn Sie eine Funktion als Parameter bereitstellen, ist es wichtig, die Funktion selbst anzugeben, gefolgt von der Verzögerung und dann etwaigen Argumenten, die die Funktion benötigt.

Mögliche Lösungen:

  1. Funktion, Verzögerung und Argumente:

    Rufen Sie setTimeout() auf folgende Weise auf:

    setTimeout(doRequest, proxytimeout, url, proxys[proxy]);

    Dadurch wird sichergestellt, dass doRequest() ist als auszuführende Funktion übergeben, zusammen mit der Verzögerung und den notwendigen Argumenten.

  2. Funktion als String:

    Alternativ können Sie doRequest übergeben () als Zeichenfolge, die ausgewertet wird:

    setTimeout('doRequest('+url+','+proxys[proxy]+')', proxytimeout);

    Dieser Ansatz erfordert weniger Klammern und bietet eine prägnantere Alternative.

  3. Anonyme Funktion mit Abschluss :

    Schließen Sie doRequest() in eine anonyme Funktion ein, um Argumentänderungen innerhalb der Schleife zu verhindern:

    (function(u, p, t) {
       setTimeout(function() { doRequest(u, p); }, t);
    })(url, proxys[proxy], proxytimeout);

    Diese Technik stellt sicher, dass die innerhalb des Abschlusses verwendeten Variablen konsistent bleiben, auch wenn Die Schleife schreitet voran. Sie ist jedoch etwas komplexer als die vorherigen Optionen.

Abhängig von Ihren spezifischen Anforderungen plant jede dieser Lösungen die Ausführung von doRequest() effektiv mit der beabsichtigten Verzögerung. Das Verständnis der Nuancen von setTimeout() ist für eine erfolgreiche asynchrone Programmierung in JavaScript unerlässlich.

Das obige ist der detaillierte Inhalt vonWarum wird meine setTimeout()-Funktion sofort ausgeführt, obwohl eine Verzögerung eingestellt ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn