Wie man in JavaScript mit Async/Await schläft
James Reed
Infrastructure Engineer · Leapcell

Key Takeaways
- JavaScript hat keine integrierte
sleep()
-Funktion, kann aber mitsetTimeout
und Promises simuliert werden. - Die Verwendung von
async/await
ermöglicht es Ihnen, die Ausführung in asynchronen Funktionen zu pausieren. - Diese nicht-blockierende Sleep-Methode hält den Haupt-Thread reaktionsfähig.
In vielen Programmiersprachen ermöglicht eine integrierte sleep()
-Funktion es Entwicklern, die Codeausführung für eine bestimmte Dauer zu pausieren. JavaScript hat jedoch keine native sleep()
-Funktion. Dennoch können Sie mit asynchronen Programmiertechniken eine ähnliche Funktionalität erreichen. Dieser Artikel untersucht verschiedene Methoden zur Implementierung eines Sleep-ähnlichen Verhaltens in JavaScript.
Das Verständnis von JavaScripts asynchroner Natur
JavaScript ist von Natur aus asynchron und Single-Threaded. Funktionen wie setTimeout()
und setInterval()
ermöglichen es Ihnen, die Codeausführung nach einer Verzögerung zu planen, aber sie pausieren nicht die Ausführung des nachfolgenden Codes. Zum Beispiel:
console.log('Start'); setTimeout(() => { console.log('Delayed'); }, 1000); console.log('End');
Ausgabe:
Start
End
Delayed
Wie oben zu sehen ist, plant die Funktion setTimeout()
die Ausführung der Anweisung console.log('Delayed')
nach 1 Sekunde, aber der Code wartet nicht auf diese Verzögerung und fährt sofort mit der Ausführung von console.log('End')
fort.
Erstellen einer benutzerdefinierten Sleep-Funktion mit Promises
Um eine Sleep-Funktion zu simulieren, können Sie eine Funktion erstellen, die ein Promise
zurückgibt, das nach einer bestimmten Verzögerung aufgelöst wird. Dieser Ansatz ermöglicht es Ihnen, die async/await
Syntax zu verwenden, um die Ausführung innerhalb asynchroner Funktionen zu pausieren.
function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); }
Anwendungsbeispiel:
async function demoSleep() { console.log('Schlafe für 2 Sekunden...'); await sleep(2000); console.log('Wieder wach!'); } demoSleep();
Ausgabe:
Schlafe für 2 Sekunden...
Wieder wach!
In diesem Beispiel wird die Funktion demoSleep
als async
deklariert, wodurch die Verwendung des Schlüsselworts await
ermöglicht wird, um die Ausführung zu pausieren, bis das Promise der Funktion sleep
nach 2 Sekunden aufgelöst wird.
One-Liner Sleep Function
Für prägnanten Code können Sie die Sleep-Funktion als One-Liner mit der Pfeilfunktionssyntax definieren:
const sleep = ms => new Promise(resolve => setTimeout(resolve, ms));
Diese Version funktioniert identisch mit dem vorherigen Beispiel, bietet aber eine kompaktere Syntax.
Verwenden von Sleep in Schleifen
Die benutzerdefinierte Sleep-Funktion kann besonders nützlich innerhalb von Schleifen sein, in denen Sie Verzögerungen zwischen den Iterationen einführen möchten.
async function countWithDelay() { for (let i = 1; i <= 5; i++) { console.log(`Zähler: ${i}`); await sleep(1000); // Warte für 1 Sekunde } console.log('Zählen abgeschlossen.'); } countWithDelay();
Ausgabe:
Zähler: 1
Zähler: 2
Zähler: 3
Zähler: 4
Zähler: 5
Zählen abgeschlossen.
In diesem Beispiel wartet die Schleife 1 Sekunde zwischen jeder Iteration und pausiert die Ausführung effektiv wie gewünscht.
Wichtige Überlegungen
-
Nur Async-Funktionen: Das Schlüsselwort
await
kann nur innerhalb von Funktionen verwendet werden, die mit dem Schlüsselwortasync
deklariert wurden. Der Versuch,await
außerhalb einerasync
-Funktion zu verwenden, führt zu einem Syntaxfehler. -
Nicht-blockierendes Verhalten: Die benutzerdefinierte Sleep-Funktion blockiert nicht den Haupt-Thread. Sie pausiert die Ausführung innerhalb der
async
-Funktion, ermöglicht es aber anderen Operationen, gleichzeitig weiterzulaufen. -
Vermeiden Sie blockierende Schleifen: Verwenden Sie keine Busy-Wait-Schleifen (z. B. While-Schleifen, die die aktuelle Zeit überprüfen), um Verzögerungen zu implementieren, da diese den Haupt-Thread blockieren und Ihre Anwendung nicht mehr reagieren kann.
Fazit
Obwohl JavaScript keine native sleep()
-Funktion besitzt, können Sie dieses Verhalten mit Promises und der async/await
-Syntax effektiv simulieren. Dieser Ansatz ermöglicht es Ihnen, die Ausführung innerhalb asynchroner Funktionen zu pausieren, ohne den Haupt-Thread zu blockieren, wodurch ein besser lesbarer und wartbarer Code bei der Verarbeitung von Verzögerungen ermöglicht wird.
FAQs
Nein, await sleep()
muss innerhalb einer async
-Funktion verwendet werden.
Nein, sie ist nicht-blockierend und ermöglicht es anderen Aufgaben, gleichzeitig ausgeführt zu werden.
Ja: const sleep = ms => new Promise(r => setTimeout(r, ms));
Wir sind Leapcell, Ihre erste Wahl für das Hosting von Node.js-Projekten.
Leapcell ist die Serverless-Plattform der nächsten Generation für Webhosting, asynchrone Aufgaben und Redis:
Multi-Sprachen-Unterstützung
- Entwickeln Sie mit Node.js, Python, Go oder Rust.
Stellen Sie unbegrenzt viele Projekte kostenlos bereit
- Zahlen Sie nur für die Nutzung - keine Anfragen, keine Gebühren.
Unschlagbare Kosteneffizienz
- Pay-as-you-go ohne Leerlaufgebühren.
- Beispiel: 25 $ unterstützen 6,94 Millionen Anfragen bei einer durchschnittlichen Antwortzeit von 60 ms.
Optimierte Entwicklererfahrung
- Intuitive Benutzeroberfläche für mühelose Einrichtung.
- Vollautomatische CI/CD-Pipelines und GitOps-Integration.
- Echtzeitmetriken und Protokollierung für umsetzbare Erkenntnisse.
Mühelose Skalierbarkeit und hohe Leistung
- Auto-Skalierung zur einfachen Bewältigung hoher Parallelität.
- Null Betriebsaufwand - konzentrieren Sie sich einfach auf den Aufbau.
Erfahren Sie mehr in der Dokumentation!
Folgen Sie uns auf X: @LeapcellHQ