Schlafen wie ein Jedi: Der vollständige Leitfaden zu sleep() in JavaScript 2025

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einleitung: Warum hat JavaScript kein normales sleep()?

\n

Hallo, Entwicklerkollegen! Wenn Sie jemals von Python, PHP oder Java zu JavaScript gewechselt sind, haben Sie sich sicherlich gefragt: «Wo ist mein geliebtes sleep(1), damit das Programm für eine Sekunde schläft?». Und nach dem Durchstöbern der Dokumentation haben Sie überrascht festgestellt, dass es eine solche Funktion in reinem JS nicht gibt.

\n

Das ist kein Bug, sondern ein Feature. JavaScript ist eine single-threaded Sprache, die in einer Ereignisschleife (Event Loop) arbeitet. Wenn wir den Thread einfach für eine Sekunde blockieren würden, würde die gesamte Oberfläche einfrieren, Klicks, Animationen und Anfragen würden nicht mehr verarbeitet werden. Ein blockierender sleep() ist ein Antipattern für das Web.

\n

Das bedeutet aber nicht, dass wir keine Pause machen können. Die Frage «What is the JavaScript version of sleep()?» auf Stack Overflow hat Hunderttausende von Aufrufen gesammelt, und im Jahr 2025 haben wir ein ganzes Arsenal an Lösungen – von einfach bis ausgefeilt.

\n

In diesem Artikel (speziell für das Bildungsportal pythonlib.ru) werden wir alle legalen Methoden, um JavaScript schlafen zu legen, ihre Vor- und Nachteile sowie die besten Praktiken für verschiedene Situationen analysieren.

\n\n

Der korrekteste Weg: async/await und Promises

\n

Seit ES2017 gibt es in JavaScript Asynchronität auf Steroiden – async/await. Wenn Sie eine Pause machen möchten, ohne den Hauptthread zu blockieren, benötigen Sie eine Funktion, die ein Promise zurückgibt, das nach der gewünschten Zeit aufgelöst wird.

\n

Hier ist sie, unsere benutzerdefinierte sleep() für 2025:

\n\n
// Universelle Verzögerungsfunktion\nfunction sleep(ms) {\n    return new Promise(resolve => setTimeout(resolve, ms));\n}\n\n// Verwendung\nasync function demo() {\n    console.log('Start...');\n    await sleep(2000); // Warte 2 Sekunden\n    console.log('2 Sekunden sind vergangen!');\n}\n\ndemo();\n
\n\n

Dies ist ein nicht-blockierender sleep. Während await sleep(2000) ausgeführt wird, arbeitet der restliche Code (Event-Handler, andere asynchrone Funktionen) weiter. Der Event Loop schläft nicht – er verschiebt lediglich die Ausführung der nächsten Zeilen, bis das Promise aufgelöst ist.

\n\n

Warum ist das die beste Praxis?

\n
    \n
  • Blockiert die UI nicht – die Oberfläche bleibt reaktionsfähig.
  • \n
  • Standard-Syntax – liest sich wie normaler synchroner Code.
  • \n
  • Geeignet für Node.js – der Server hängt nicht.
  • \n
  • Überall unterstützt – moderne Browser und Node.js 8+.
  • \n
\n\n

Der gute alte setTimeout()

\n

Vor der Ära von async/await haben wir setTimeout() verwendet. Es ist immer noch lebendig und relevant, erfordert aber Callbacks, was zur «Callback-Hölle» führt.

\n\n
console.log('Start');\nsetTimeout(() => {\n    console.log('1.5 Sekunden sind vergangen');\n}, 1500);\nconsole.log('Ende (wird sofort ausgeführt)');\n
\n\n

Die Konsolenausgabe wird sein: Start, dann Ende (sofort), und erst dann 1.5 Sekunden sind vergangen. Das ist nicht ganz sleep() im klassischen Sinne, aber für einfache Szenarien ideal.

\n\n

Wann sollte man setTimeout verwenden?

\n
    \n
  • Wenn eine Aktion einmal nach einer bestimmten Zeit ausgeführt werden soll.
  • \n
  • In Animationen (z. B. einen Effekt nach 300 ms starten).
  • \n
  • In einfachen Skripten ohne komplexe Logik.
  • \n
\n\n

Blockierender sleep (und warum man das nicht tun sollte)

\n

Ja, technisch gesehen können Sie den Thread mit einer leeren Schleife einfrieren. Aber das ist reines Übel.

\n\n
function blockSleep(milliseconds) {\n    const start = Date.now();\n    while (Date.now() - start < milliseconds) {\n        // Leer – der Prozessor heizt sich auf, der Tab hängt\n    }\n}\n\nconsole.log('Anfang');\nblockSleep(3000);\nconsole.log('3 Sekunden sind vergangen (aber der Browser hing)');\n
\n\n

Dieser Code tut genau das, was Sie verlangen: Er stoppt die Ausführung

Blogs

Buchempfehlungen