Warum wird meine von setTimeout geplante Funktion nicht sofort ausgeführt?
Ihr Code versucht, Proxyserver mithilfe der setTimeout-Funktion zum Aufrufen von doRequest zu testen im 10-Sekunden-Takt. Seltsamerweise werden die Funktionen sofort ausgeführt, anstatt dem vorgesehenen Zeitplan zu folgen.
Verstehen des Problems
Das Problem liegt darin, wie Sie die doRequest-Funktion an setTimeout übergeben. Wenn Sie eine Funktion als erstes Argument angeben, wie in setTimeout(doRequest(url, Proxys[Proxy]), Proxytimeout), wird die Funktion sofort aufgerufen.
Lösungen
Um das Problem zu lösen, haben Sie drei Möglichkeiten:
Übergeben Sie die Argumente als separate Parameter:
setTimeout(doRequest, proxytimeout, url, proxys[proxy]);
Verwenden Sie einen Zeichenfolgenausdruck:
setTimeout('doRequest(' + url + ',' + proxys[proxy] + ')', proxytimeout);
Definieren Sie eine anonyme Funktion innerhalb von a Abschluss:
(function(u, p, t) { setTimeout(function() { doRequest(u, p); }, t); })(url, proxys[proxy], proxytimeout);
Die erste Option wird bevorzugt, da sie klarer und expliziter ist. Die zweite Option ist aufgrund ihrer „hackigen“ Natur weniger wünschenswert, während die dritte Option komplex zu verstehen sein kann, aber verhindert, dass sich Werte innerhalb der Schleife ändern.
Das obige ist der detaillierte Inhalt vonWarum wird meine Funktion „setTimeout' sofort und nicht zu einem geplanten Zeitpunkt ausgeführt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!