Das Verständnis von Zeitverzögerungen in JavaScript ist entscheidend für die Erstellung reaktionsfähiger und effizienter Webanwendungen. In diesem Artikel befassen wir uns mit dem Problem, eine bestimmte Zeit abzuwarten, bevor eine Codezeile ausgeführt wird.
Das Problem:
Ein unerfahrener JavaScript-Entwickler ist darauf gestoßen Ein Problem, bei dem eine Funktion nicht wie vorgesehen wartet, bevor sie eine Bedingung auswertet. Das erwartete Verhalten besteht darin, 5 Sekunden zu warten, bevor überprüft wird, ob sich ein bestimmter Status geändert hat. Die aktuelle Funktion prüft jedoch sofort, anstatt zu warten.
Die Lösung:
Um dieses gewünschte Verhalten zu erreichen, können wir die folgenden Ansätze nutzen:
Browser:
Mit der modernen Async/Await-Syntax (verfügbar in Browsern, die ECMAScript 6 und höher unterstützen) können wir die folgende Lösung verwenden:
<code class="javascript">const delay = ms => new Promise(res => setTimeout(res, ms)); async function yourFunction() { await delay(5000); console.log("Waited 5s"); await delay(5000); console.log("Waited an additional 5s"); }</code>
Dieser Ansatz vereinfacht den Code, indem er ihn synchron erscheinen lässt, obwohl er asynchron ausgeführt wird.
Node.js:
Für Node.js Version 16 und höher können wir das nutzen integrierte, auf Versprechen basierende setTimeout-Funktion:
<code class="javascript">import { setTimeout } from "timers/promises"; async function yourFunction() { await setTimeout(5000); console.log("Waited 5s"); await setTimeout(5000); console.log("Waited an additional 5s"); }</code>
Achtung:
Es ist wichtig zu beachten, dass die Verwendung einer Verzögerungsfunktion zur Vermeidung von Rennbedingungen erforderlich ist (insbesondere beim Testen asynchroner Systeme). Code) sollte mit Vorsicht erfolgen, da dies oft zu suboptimalen Lösungen führen kann.
Das obige ist der detaillierte Inhalt vonWie implementiert man eine Wartefunktion in JavaScript für asynchrone Aufgaben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!