Tach!
- Du kannst jede Funktion awaiten, die ein Promise zurückliefert.
Es muss nicht einmal ein vollständiges Promise sein. Es recht, wenn das zurückgegebene Objekt "thenable" ist, also eine Funktion namens then enthält.
Man kann übrigens auch andere Dinge als Promises/Thenables awaiten, aber dann wird der Wert in ein erfülltes Promise gewandelt und zurückgegeben. Damit sieht es so aus, als sei auch setTimeout() awaitable, weil das anstandslos durchgeht. Das Ergebnis ist dann nicht anders als ohne await.
function delay(milliseconds, ...data) { return new Promise((resolve, reject) => setTimeout(resolve, delay, ...data)); };
Wenn du das reject
nicht brauchst, kannst du es weglassen. Und das delay
im setTimeout()-Aufruf sollte sicher ein milliseconds
sein.
Außerdem nimmt resolve
nur ein einzelnes Argument an, das Spreading ist also nicht zielführend. Ein Parameter wird durchgereicht, der Rest geht verloren.
Aber wenn das Ziel ist, das delay zu awaiten, dann muss ich da nicht noch Daten durchschleifen, denn die habe ich ja bereits im aktuellen Kontext zur Verfügung, und sie werden weder durch das setTimeout noch durch das Promise geändert.
Und das Semikolon nach der Funktionsdefinition ist überflüssig.
function delay(milliseconds) {
return new Promise(resolve => setTimeout(resolve, milliseconds));
}
const hugo = 'hugo';
delay(1000)
.then(() => console.log(hugo));
// ODER
const hugo = 'hugo';
await delay(1000);
console.log(hugo);
dedlfix.