Ich versuche, einfachen Code mit a zu schreiben setTimeout
aber die setTimeout
wartet einfach nicht so lange, wie es soll, und der Code wird sofort ausgeführt. Was mache ich falsch?
setTimeout(testfunction(), 2000);
Adler
Ich versuche, einfachen Code mit a zu schreiben setTimeout
aber die setTimeout
wartet einfach nicht so lange, wie es soll, und der Code wird sofort ausgeführt. Was mache ich falsch?
setTimeout(testfunction(), 2000);
Matte
Sie rufen die Funktion sofort auf und planen ihren Rückgabewert.
Verwenden:
setTimeout(testFunction, 2000);
^
Hinweis: keine Eltern.
ok, danke.. aber gibt es eine Möglichkeit, Parameter wie setTimeout(testFunction(obj),2000) an die Funktion zu senden??! Übrigens wird das auch nicht funktionieren setTimeout(alert(“test”),2000)..
– Adler
21. August 2011 um 9:24
@Adler: Ja: setTimeout(function() { alert("test"); }, 2000);
– TJ Crowder
21. August 2011 um 9:25
@Adler: Das ist möglich setTimeout(alert, 2000, "test")
aber es wird vom IE nicht unterstützt.
– pimvdb
21. August 2011 um 9:26 Uhr
@Adler: Siehe auch: stackoverflow.com/questions/1190642/…
– Matte
21. August 2011 um 9:27 Uhr
José Faeti
Entfernen Sie die Klammer
setTimeout(testfunction(), 2000);
Wenn Sie Parameter an die Funktion senden möchten, können Sie eine anonyme Funktion erstellen, die dann die gewünschte Funktion aufruft.
setTimeout(function() {
testfunction('hello');
}, 2000);
Bearbeiten
Jemand hat vorgeschlagen, einen String als ersten Parameter von setTimeout zu senden. Ich würde vorschlagen, dies nicht zu befolgen und niemals einen String als ersten setTimeout-Parameter zu senden, da die Eval-Funktion verwendet wird. Dies ist eine schlechte Praxis und sollte nach Möglichkeit vermieden werden.
Emil Vikström
Entfernen Sie die Klammern nach dem testfunction
Name:
setTimeout(testfunction, 2000);
Der Grund ist, dass das erste Argument zu setTimeout
sollte eine Funktion sein Referenz, nicht der Rückgabewert der Funktion. In Ihrem Code, testfunction
wird sofort aufgerufen und der Rückgabewert an gesendet setTimeout
.
ok, danke.. aber gibt es eine Möglichkeit, Parameter wie setTimeout(testFunction(obj),2000) an die Funktion zu senden??! Übrigens wird das auch nicht funktionieren setTimeout(alert(“test”),2000)…
– Adler
21. August 2011 um 9:24
@Adler ja, Sie können alle Ihre Argumente nach dem Verzögerungsargument übergeben, so: setTimeout(testFunction, 2000, obj)
– Brandon McConnell
29. Mai 2021 um 19:31 Uhr
Shubham Arya
Ich sehe hier viele Antworten, aber ich möchte mir einfach etwas Zeit nehmen, um die Grundursache des Problems zu erklären.
Eigentlich ist die Funktion setTimeOut() eine asynchrone Funktion, und wenn Sie eine Funktion als einen der Parameter an die Funktion setTimeOut() übergeben, möchte Ihr Skript eigentlich keine Zeit verschwenden und die übergebene Funktion so schnell wie möglich ausführen.
Es gibt also nur wenige Möglichkeiten, dies zu umgehen. Sie können entweder Rückrufe oder Versprechen verwenden.
Weitere Informationen finden Sie unter diesem Link: https://www.w3schools.com/js/js_promise.asp
Ich zeige Ihnen, wie Sie Callback nutzen können, um das zu erreichen, was Sie erreichen möchten.
Indem du tust –
setTimeOut(your_function_name_without_parentheses, <number of milliseconds>)
Sie können Ihrem Timeout tatsächlich sagen, dass Sie sich bitte zuerst selbst ausführen und dann meine als erster Parameter übergebene Rückruffunktion ausführen.
Oder wenn Sie einen Parameter an die Callback-Funktion übergeben möchten, können Sie so etwas tun:
setTimeOut(() => {your_function_name_with_parentheses(argument_that_you_want_to_pass), <number of milliseconds>})
Es gibt auch andere Möglichkeiten, die oben bereits beantwortet wurden.
Außerdem bin ich ein JS-Neuling. Bitte lassen Sie mich wissen, wenn mein Verständnis Lücken aufweist.
Shraddha
Entfernen Sie zunächst die Klammer:
setTimeout(testfunction, 2000);
Und dann, wenn Sie Parameter übergeben möchten setTimeout
Funktion können Sie auf diese Weise übergeben:
setTimeout(testfunction, 2000, param1, param2);
Notiz: Sie können je nach Funktionsanforderung mehrere Parameter übergeben.
shaILU
Nun, Sie haben vielleicht die Antwort bekommen, aber ich erkläre die Ursache und Lösung. Es gibt zwei Möglichkeiten, eine Funktion nach der erforderlichen Zeit aufzurufen.
1. setTimeout(“FUNC_NAME ()’, TIME_IN_MS);
Hier ist FUNC_NAME in doppelten Anführungszeichen die ursprüngliche Funktion, die Sie nach TIME_IN_MS Millisekunden aufrufen möchten. Dies liegt daran, dass, wenn Sie die Anführungszeichen nicht setzen, die Funktion während der Interpretation des Java-Skripts sofort ausgeführt wird und Ihr Zweck vereitelt wird. Damit der Interpreter die Aussage überspringen kann, müssen wir hier Anführungszeichen setzen.
2. setTimeout(function () {FUNC_NAME ()}, TIME_IN_MS);
Hier wird eine anonyme Funktion erstellt, die den Interpreter anweist, die Funktion nach einer bestimmten Zeit auszuführen, anstatt die Zeit auszuwerten.
Danke, shaILU
Jonathan Utsu Undelikwo
Entfernen Sie die Klammer. Derzeit rufen Sie die Funktion sofort auf. Was derzeit an setTimeout übergeben wird, ist der vom testfunction()-Aufruf zurückgegebene Wert, aber was Sie als erstes Argument an setTimeout übergeben sollten, ist eine Funktionsreferenz
setTimeout(testfunction, 2000);
Vielen Dank für den Beitrag, aber erläutern Sie bitte, inwiefern dies den bereits seit einem Jahrzehnt bestehenden Antworten etwas hinzufügt.
– ggorlen – zum LLM-Streik
31. Juli 2021 um 18:33 Uhr
()
fungiert hier als Aufrufoperator. Aber Sie möchten die Funktion an übergebensetTimeout
nicht aufrufen.– Šime Vidas
21. August 2011 um 9:24
Duplikat von Warum wird mein von setTimeout geplanter Funktionsaufruf sofort ausgeführt?, Das Aufrufen von Funktionen mit setTimeout(), Javascript setTimeout() ignoriert die Timeout-Länge
– outis
9. November 2011 um 21:43