Heim  >  Artikel  >  Web-Frontend  >  Warum wird meine setTimeout-Funktion sofort ausgeführt?

Warum wird meine setTimeout-Funktion sofort ausgeführt?

DDD
DDDOriginal
2024-11-11 17:31:03683Durchsuche

Why Does My setTimeout Function Execute Immediately?

Unerwartete sofortige Funktionsausführung mit setTimeout

Beim Versuch, einen Funktionsaufruf in bestimmten Intervallen zu planen, stößt der Benutzer auf ein Problem, bei dem setTimeout Funktion führt die Funktion trotz des angegebenen Timeouts sofort aus. Die doRequest-Funktion sollte in 10-Sekunden-Intervallen aufgerufen werden, aber sie wird sofort aufgerufen.

Der Grund für diese sofortige Ausführung liegt in der Art und Weise, wie die setTimeout-Funktion aufgerufen wird. Der folgende Codeausschnitt veranschaulicht das Problem:

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

In diesem Code wird die doRequest-Funktion als erstes Argument an setTimeout übergeben, aber die Funktion wird sofort ausgeführt und nicht geplant.

Lösungen:

Um dieses Problem zu beheben und sicherzustellen, dass doRequest geplant wird, gibt es drei alternative Möglichkeiten, setTimeout zu verwenden:

  1. Übergeben Sie den Funktionsnamen als Zeichenfolge:

    setTimeout('doRequest(' + url + ',' + proxys[proxy] + ')', proxytimeout);
  2. Verwenden Sie eine anonyme Funktion:

    (function(u, p, t) {
        setTimeout(function() { doRequest(u, p); }, t);
    })(url, proxys[proxy], proxytimeout);
  3. Übergeben Sie zuerst den Funktionsnamen und dann die Parameter:

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

Das obige ist der detaillierte Inhalt vonWarum wird meine setTimeout-Funktion sofort ausgeführt?. 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