nodejs sleep?

2 Antworten

Guten Abend,

ich bin in einer asyncronen funktion aber nicht in der höchsten modulebene weswegen ich kein await nutzen kann

Ich denke, du irrst dich - die Bedeutung asynchroner Funktionen liegt in der Verwendung des await-Keywords. Die Verwendung von await ist meines Wissens nach nur in CommonJS-Modulen auf höchster Modulebene nicht möglich. Bei ES-Modules sieht die Sache schon ganz anders aus.

Wie dem auch sei, @regex9 hat dir die verschiedenen Möglichkeiten schon genannt. Unter Verwendung eines Closures etwa folgendermaßen:

function sleepWithCallback(callback)
{
  setTimeout(() => callback(), 3000);
}


sleepWithCallback(() => console.log('after 3 seconds!'));

Oder alternativ unter Verwendung einer Promise:

function sleepAsPromise()
{
  return new Promise(resolve => {
    setTimeout(() => resolve(), 3000);
  });
}


// via callback
sleepAsPromise().then(() => console.log('after 3 seconds!'));


// via await (ES-Modul)
await sleepAsPromise();
console.log('after 3 seconds!');


// via await (CommonJS-Modul)
(async () => {
  await sleepAsPromise();
  console.log('after 3 seconds!');
})();

Der gekapselte Aufruf von setTimeout wartet dabei 3 Sekunden, bis die Callback-Funktion im ersten Argument aufgerufen wird.

LG

a) Nutze ein Promise.

b) Kapsel den Code, der später ausgeführt werden soll, in ein Closure und gib dieses weiter.

Beispiel:

function doSomething(callback) {
  /* ... */
  callback();
}

// invocation:
doSomething(() => {
  /* execute later ... */
});