Im Gegensatz zu anderen Programmiersprachen hat JavaScript keine eingebaute Sleep-Methode. Sie können also nicht einfach eine sleep()-Funktion aufrufen, um ein Node.js-Programm anzuhalten. Es gibt jedoch andere Möglichkeiten, wie Sie ein Programm für eine bestimmte Zeit warten lassen können.

In diesem Tutorial werden drei Ansätze erläutert: setTimeout, async/await und das sleep-promise-Paket.

Verwenden von setTimeout(), um auf eine bestimmte Zeit zu warten

Das setTimeout() Funktion plant Code für die Laufzeit, der ausgeführt wird, sobald eine festgelegte Zeitspanne verstrichen ist. Es akzeptiert eine Funktion und eine Verzögerungszeit in Millisekunden. Hier ist die Syntax:

setTimeout(Funktion(), timeInMs)

Angenommen, Sie hatten eine Funktion, die auf der Konsole gedruckt wird:

FunktionprintSentence() {
Konsole.log ("setTimeout() verwenden")
}

Um die obige Funktion nach Ablauf von zwei Sekunden auszuführen, übergeben Sie die Funktion und die Verzögerungszeit von 2000 ms an die setTimeout() Funktion:

setTimeout (printSentence, 2000)

Dies funktioniert zwar, es ist jedoch nicht garantiert, dass Ihre Funktion genau nach zwei Sekunden ausgeführt wird. Es wird definitiv mindestens so lange dauern, aber es kann länger dauern.

Ist setTimeout() genau?

Ja, aber mit einigen Einschränkungen. setTimeout() ist ein asynchrone JavaScript-Funktion was bedeutet, dass es nicht blockiert. Der von Ihnen geplante Code wird der Ereignisschleife hinzugefügt, während der Rest Ihres Programms fortgesetzt wird.

Nach Ablauf der Verzögerungszeit führt Ihr Programm den geplanten Code aus, aber nur, wenn es dazu frei ist. Wenn sich anderer Code in der Aufrufliste befindet, wird dieser zuerst ausgeführt, selbst wenn der geplante Code ausgeführt werden soll. Hier kann eine zusätzliche Verzögerungszeit auftreten, daher die Ungenauigkeit.

Betrachten Sie das folgende Programm.

Konsole.log ("Hallo Welt!")

FunktionprintSentence() {
Konsole.log ("setTimeout() verwenden")
}

setTimeout (printSentence, 2000)
Konsole.log ("Erledigt")

Folgendes wird die Konsole anzeigen, wenn Sie sie ausführen:

Hallo Welt!
Erledigt
setTimeout() verwenden

Dieses Programm führt eine Verzögerung ein, verzögert jedoch nur den Code, an den es übergeben wird setTimeout(). Der Rest des Programms wird fortgesetzt, wobei der geplante Code es erst nach Ablauf der Dauer unterbricht. Wenn Sie den gesamten Code der Reihe nach mit einer Pause in der Mitte ausführen möchten, verwenden Sie setTimeout() wird nicht funktionieren.

Eine Alternative besteht darin, synchronen Code zu schreiben, der die Ausführung so lange blockiert, wie Sie es benötigen. Sie könnten zum Beispiel a verwenden tun... während Schleife, um den Ausführungs-Thread zu blockieren, bis die Verzögerungszeit abgelaufen ist:

Funktionverzögern(Frau) {
konst Datum = Datum.jetzt();
Lassen aktuellesDatum = Null;

tun {
aktuellesDatum = Datum.jetzt();
} während (aktuellesDatum - Datum < ms);
}

Konsole.log ("Hallo Welt");
Verzögerung (2000);
Konsole.log ("Wird nach 2 Sekunden gedruckt!");

Das verzögern() Die Funktion wird wiederholt, bis die aktuelle Zeit gleich oder größer als die Startzeit plus Verzögerung ist. Der Nachteil dieses Ansatzes ist, dass er CPU-intensiv ist, insbesondere bei großen Verzögerungen. Das do...while-Schleife muss die verbleibende Zeit nach jeder Millisekunde berechnen.

Verwenden von Async/Await zum Verzögern eines Node.js-Programms

Ein erwarten -Ausdruck bewirkt, dass die Ausführung angehalten wird, bis ein Promise aufgelöst ist. Damit können Sie asynchronen Code so ausführen, als wäre er synchron, aber effizienter als durch manuelles Blockieren der Ausführung. Sie können await nur innerhalb einer markierten Funktion verwenden asynchron.

Funktionverzögern(Zeit) {
RückkehrNeuVersprechen(Auflösung => setTimeout (Auflösung, Zeit));
}

asynchronFunktionprintSentence() {
Konsole.log ("Hallo Welt")
erwarten verzögern(2000);
Konsole.log ("Wird nach 2 Sekunden gedruckt");
}

printSentence();

Dies ist die Ausgabe des obigen Programms:

Hallo Welt
Wird nach 2 Sekunden gedruckt

Verwenden des Schlafversprechen-Pakets

Das Schlafversprechen -Paket vereinfacht das Anhalten von Node.js-Programmen. Sie müssen es nur aufrufen und die Verzögerungszeit in Millisekunden angeben.

Beginnen Sie mit der Installation über npm:

npm Installierenschlafen-versprechen

Hier ist ein Beispiel dafür, wie Sie es in Ihrem Programm verwenden könnten:

konst schlafen = erfordern('Schlafversprechen');

(asynchron () => {
Konsole.log ("Hallo Welt.");
erwarten schlafen(2000);
Konsole.log ("Wird nach zwei Sekunden gedruckt.");
})();

Wenn Sie das Programm ausführen, sieht die Ausgabe wie folgt aus.

Hallo Welt.
Wird nach zwei Sekunden gedruckt.

Auswahl eines geeigneten Ansatzes

Die Implementierung einer Schlaffunktion in Node.js kann schwierig sein. Wenn Sie entscheiden, wie Sie vorgehen, überlegen Sie, was Sie erreichen möchten. Wenn Sie nur einen Code für eine minimale Zeit verzögern möchten, setTimeout() ist eine gute Möglichkeit. Wenn Sie jedoch die Ausführung Ihres gesamten Programms anhalten möchten, sollten Sie verwenden asynchron/warten.

Synchron vs. Asynchrone Programmierung: Wie unterscheiden sie sich?

Lesen Sie weiter

TeilenTwitternTeilenEmail

Verwandte Themen

  • Programmierung
  • Web Entwicklung
  • Programmierung
  • JavaScript

Über den Autor

Maria Gathoni (19 veröffentlichte Artikel)

Mary Gathoni ist eine Softwareentwicklerin mit einer Leidenschaft für die Erstellung technischer Inhalte, die nicht nur informativ, sondern auch ansprechend sind. Wenn sie nicht gerade programmiert oder schreibt, trifft sie sich gerne mit Freunden und ist draußen.

Mehr von Mary Gathoni

Abonnieren Sie unseren Newsletter

Abonnieren Sie unseren Newsletter für technische Tipps, Rezensionen, kostenlose E-Books und exklusive Angebote!

Klicken Sie hier, um sich anzumelden