dedlfix: async await

Beitrag lesen

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.