JavaScript: Sleep und setTimeout

Manchmal kommt man als Programmierer in eine Situation, in der die Ausführung des Programms für eine kurze Zeit unterbrochen werden soll. Um dies zu bewerkstelligen, gibt es diverse Möglichkeiten in den verschiedenen Programmiersprachen. In JavaScript gibt es seit ES6 die Option, Promises für diesen Zweck zu verwenden.

Eine Sleep-Funktion implementieren

Um in JavaScript ein paar Sekunden auszusetzen, reicht es, wenn Sie sich eine kleine Hilfsfunktion definieren. Die Sleep-Funktion gibt ein Promise-Objekt zurück, dessen Status nach der gewünschten Zeit in Millisekunden auf resolved gesetzt wird.

function Sleep(milliseconds) {
return new Promise(resolve => setTimeout(resolve, milliseconds));
}

Möchten Sie diese Funktionalität nun nutzen, müssen Sie Ihre Funktion mit dem async-Schlüsselwort markieren. Ohne async ist es nicht erlaubt, den Befehl await zu verwenden. Eine beispielhafte Anwendung zeigt die folgende Funktion:

async function test() {
console.log("Vor der sleep-Funktion");
await Sleep(3000); // Pausiert die Funktion für 3 Sekunden
console.log("Nach der Sleep Funktion");
}

Die Funktion ruft die Sleep-Funktion auf. Mithilfe von await stoppt die Funktionsausführung für die angegebene Zeit. Ohne await würde die Funktion weiter ausgeführt werden, da nicht auf die Auflösung des von Sleep zurückgegebenen Promise-Objekts gewartet wird.

Eine Funktion mit Verzögerung ausführen

Um eine Funktion nach einer bestimmten Wartezeit auszuführen, gibt es die Funktion setTimeout. Bei setTimeout übergibt man eine auszuführende, sogennante Callback-Funktion. Diese Funktion wird nach der angegebenen Zeit ausgeführt. Definieren Sie sich also eine Funktion, die aufgerufen werden soll:

function callback() {
console.log("Callback Funktion wird aufgerufen");
}

Jetzt können Sie mit setTimeout die soeben erstellte Funktion mit der angegebenen Verzögerung aufrufen. Zu beachten ist allerdings, dass nachfolgender Code ohne Wartezeit ausgeführt wird:

setTimeout(callback, 3000); //Ruft die Callback-Funktion nach 3 Sekunden auf
console.log("Test"); //Wird sofort, ohne Wartezeit ausgeführt


Alternativ ist es auch möglich, einen Funktionsausdruck als Argument für setTimeout zu übergeben. Sie können setTimeout also auch folgendermaßen aufrufen:

setTimeout(function() {
console.log("Callback Funktion wird aufgerufen");
}, 3000);

Der Vorteil hierbei ist, dass keine neue Funktion definiert werden muss und man sofort sieht, welcher Codeblock nach der Verzögerung ausgeführt wird.