Schlafen in Node.js

Isaac Tony 12 Oktober 2023
  1. Verwenden Sie die Methode setTimeout(), um die Ausführung von Codes in Node.js zu planen
  2. Verwenden Sie die Methode setInterval(), um die Ausführung von Codes in Node.js zu planen
  3. Verwenden Sie das Schlüsselwort await(), um die Ausführung von Codes in Node.js anzuhalten
Schlafen in Node.js

In Node.js (oder Programmierung im Allgemeinen) gibt es Szenarien, in denen wir einen bestimmten Code oder ein bestimmtes Skript benötigen, das regelmäßig ausgeführt wird. Node.js stellt uns zwei eingebaute Funktionen zur Verfügung, mit denen wir die Ausführung von Funktionen in Node.js und JavaScript planen können.

Diese Methoden sind unten.

  1. setTimeout()
  2. setIntervall()

Verwenden Sie die Methode setTimeout(), um die Ausführung von Codes in Node.js zu planen

Die Methode setTimeout() ist eine asynchrone Methode, die es uns ermöglicht, eine Funktion nach bestimmten Zeitintervallen einmal auszuführen. Die Funktion setTimeout() akzeptiert viele Parameter, von denen zwei obligatorisch sind, während der Rest optional ist.

  1. Die Funktion, die nach dem eingestellten Zeitintervall ausgeführt werden soll
  2. Die Zahl in Millisekunden, die der Timer wartet, bevor er die angegebene Funktion ausführt
  3. Ein Teil des Codes, der nach der eingestellten Zeit ausgeführt wird, übertrifft alle anderen Argumente, die in der auszuführenden Funktion angegeben sind.

Diese Funktion gibt eine als timeout ID bekannte Ganzzahl zurück, die auf das von der Funktion setTimeout() erstellte Objekt verweisen kann.

Hier ist ein einfaches Beispiel für die Verwendung der Funktion setTimeout(), um Funktionen in einem anderen Zeitintervall auszuführen, das in Millisekunden angegeben ist.

setTimeout(() => {console.log('This is the first function')}, 2000);
setTimeout(() => {console.log('This is the second function')}, 4000);
setTimeout(() => {console.log('This is the final function')}, 5000);

Beispielausgabe:

This is the first function
This is the second function
This is the final function

Im obigen Beispiel gibt es eine Wartezeit von 2 Sekunden, bevor die erste und zweite Funktion ausgeführt werden, und eine Wartezeit von 1 Sekunde, bevor die letzte Funktion ausgeführt wird.

Da nun setTimeout() eine asynchrone Funktion ist, könnten wir stattdessen die finale Funktion ausführen. Gleichzeitig wartet die zweite Funktion im Hintergrund und lässt die erste Funktion zuletzt mit einer Wartezeit von 2 Sekunden zwischen jeder Funktion ausführen.

setTimeout(() => {console.log('This is the first function')}, 6000);
setTimeout(() => {console.log('This is the second function')}, 4000);
setTimeout(() => {console.log('This is the final function')}, 2000);

Beispielausgabe:

This is the final function
This is the second function
This is the first function

Das setTimeout() ist wirklich nützlich, wenn es zusammen mit Callback-Funktionen verwendet wird, um Callback-Funktionen so einzustellen, dass sie nach einiger Zeit ausgeführt werden. Hier ist eine einfache Rückruffunktion, die nach 4 Sekunden ausgeführt werden soll.

const displayFunction =
    () => {
      console.log('Code to be executed by the display function!');
      // some more code
    }

// function may contain more parameters
setTimeout(displayFunction, 4000);

Beispielausgabe:

Code to be executed by the display function!

Ein präziserer und besserer Ansatz zum Umschreiben des Codes mit einer Pfeilfunktion wird unten gezeigt.

setTimeout(() => {console.log('Code to be executed by the function!')}, 4000)

Beispielausgabe:

Code to be executed by the function!

Verwenden Sie die Methode setInterval(), um die Ausführung von Codes in Node.js zu planen

Das timers-Modul stellt uns auch die Methode setInterval() zur Verfügung, deren Funktionalität ähnlich der Methode setTimeout() ist. Im Gegensatz zur Methode setTimeout() ermöglicht uns die Methode setInterval() jedoch, ein Skript in bestimmten Intervallen wiederholt auszuführen, bis es explizit gestoppt wird.

Die Methode setInterval() akzeptiert zwei obligatorische Parameter: die auszuführende Funktion und das Ausführungszeitintervall. Wir können der Funktion auch zusätzliche optionale Parameter hinzufügen.

Die Methode gibt ein als Timer-ID bekanntes Objekt zurück, das zum Abbrechen des Timers verwendet werden kann. Hier ist ein einfaches Beispiel für die Implementierung der Methode setInterval().

setInterval(() => {
  console.log('Function repeatedly executed after every 2 seconds!');
}, 2000)

Beispielausgabe:

Function repeatedly executed after every 2 seconds!
Function repeatedly executed after every 2 seconds!
Function repeatedly executed after every 2 seconds!
Function repeatedly executed after every 2 seconds!
Function repeatedly executed after every 2 seconds!
Function repeatedly executed after every 2 seconds!
^C

Diese Funktion wird wiederholt ausgeführt, sofern sie nicht durch Tastatur-Interrupt durch Drücken von CTRL+C unterbrochen wird. Eine konventionellere Art, die Methode setInterval() nach einer bestimmten Anzahl von Malen zu stoppen, ist die Verwendung der Funktion clearInterval().

Wir können dies tun, indem wir die von der Methode setInterval() zurückgegebene ID als Parameter an clearInterval() übergeben, wie unten gezeigt.

const id = setInterval(() => {
  console.log('Function repeatedly executed after every 2 seconds!');
}, 2000)

clearInterval(id);

Wir können auch die Methode setTimeout() zusammen mit der Methode clearInterval() verwenden, um die Methode setInterval() nach einer bestimmten Anzahl von Sekunden zu stoppen.

Hier ist ein einfaches Beispiel dafür.

const id = setInterval(() => {
  console.log('Function repeatedly executed after every 2 seconds!');
}, 2000)

setTimeout(
    () => {
      clearInterval(id),
      console.log('Function stopped after 10 seconds!')
    },
    10000)

Beispielausgabe:

Function repeatedly executed after every 2 seconds!
Function repeatedly executed after every 2 seconds!
Function repeatedly executed after every 2 seconds!
Function repeatedly executed after every 2 seconds!
Function stopped after 10 seconds!

Verwenden Sie das Schlüsselwort await(), um die Ausführung von Codes in Node.js anzuhalten

Im Gegensatz zu anderen Programmiersprachen wie C, die eine sleep-Funktion bereitstellen, die es uns ermöglicht, einen bestimmten Thread in den Ruhezustand zu versetzen, während wir auf die Ausführung eines anderen warten, verfügt JavaScript nicht über diese Funktion.

Wenn wir jedoch eine asynchrone Promise-basierte Funktion verwenden, können wir das Schlüsselwort await() verwenden, um die Ausführung eines Codestücks anzuhalten, bis dieses Promise zuerst erfüllt ist.

Wir nennen diese Funktion sleep(); das hindert Sie jedoch nicht daran, ihm einen anderen Namen zu geben, den Sie für angemessen halten.

Unter der Funktion async haben wir das Schlüsselwort await() verwendet, um die zweite Funktion console.log() auszusetzen, bis das Promise aufgelöst wurde; dies dauert durchschnittlich 4 Sekunden. Der vom Promise zurückgegebene Wert wird als Rückgabewert des await()-Ausdrucks betrachtet.

async function my_asyncFunction() {
  console.log('Some Code we want to be executed');
  await sleep(4000);
  console.log('Some other code we want to be executed after some seconds');
}

function sleep(ms) {
  return new Promise((resolve) => {
    setTimeout(resolve, ms);
  });
}

my_asyncFunction();

Beispielausgabe:

Some Code we want to be executed
Some other code we want to be executed after some seconds

Wir können den await()-Ausdruck noch nicht ausserhalb der async-Funktionen in regulärem Javascript-Code verwenden. Jeder Versuch, diese Syntax zu verwenden, gibt einen Syntaxfehler zurück.

async function my_asyncFunction() {
  console.log('Some Code we want to be executed');

  console.log('Some other code we want to be executed after some seconds');
}

await sleep(4000);
function sleep(ms) {
  return new Promise((resolve) => {
    setTimeout(resolve, ms);
  });
}

my_asyncFunction();

Beispielausgabe:

E:\Tonyloi>await.js:7
await sleep(4000);
^^^^^

SyntaxError: await is only valid in async functions and the top level bodies of modules
    at Object.compileFunction (node:vm:352:18)
    at wrapSafe (node:internal/modules/cjs/loader:1031:15)
    at Module._compile (node:internal/modules/cjs/loader:1065:27)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
    at Module.load (node:internal/modules/cjs/loader:981:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
    at node:internal/main/run_main_module:17:47

Wir können den await-Ausdruck jedoch außerhalb der Funktion async in der JavaScript-Modulsyntax verwenden.

Autor: Isaac Tony
Isaac Tony avatar Isaac Tony avatar

Isaac Tony is a professional software developer and technical writer fascinated by Tech and productivity. He helps large technical organizations communicate their message clearly through writing.

LinkedIn