nodejs sleep?
wie kann ich in nodejs die weitere codeausführung verzögern?
ich bin in einer asyncronen funktion aber nicht in der höchsten modulebene weswegen ich kein await nutzen kann
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 ... */
});