async await
bearbeitet von Rolf BHallo Dani,
async und await sind ein Sprachkonstrukt, das eine Verkleidung der Promises darstellt. Auch „Syntaxzucker“ genannt.
Das heißt:
- Du kannst jede Funktion awaiten, die ein Promise zurückliefert.
- Jede Funktion, die async ist, gibt ein Promise zurück, d.h. Du kannst auf ihrem Ergebnis .then und .catch aufrufen
Da es kein Promise-basierendes Systemkonstrukt gibt, das eine Zeitverzögerung erzeugt, bist Du bei setTimeout auf ein manuelles Promise angewiesen. Dafür bietet sich ein Konstrukt ohne explizites async an:
~~~js
function delay(milliseconds, ...data) {
return new Promise((resolve, reject) => setTimeout(resolve, delay, ...data));
};
delay(1000, "hugo")
.then(h => console.log(h));
// ODER
let h = await delay(1000, "hugo");
console.log(h);
~~~
gibt in beiden Fällen 1s "hugo" aus.
Der zweite Parameter für <code>delay</code> greift als Rest-Parameter (erkennbar am ...) alle Parameter hinter dem Timeout auf und übergibt sie per Spread-Operator (das ...) als einzelne Parameter ab Position 3 an setTimeout. Von setTimeout werden diese Parameter dann Timeout-Handler durchlauferhitzt, d.h. die Parameter 2 bis N von delay landen als Parameter 3 bis (N+1) bei setTimeout und dann als Parameter 1 bis (N-1) im then-Handler.
`...` - je nach Kontext Rest oder Spread. Confused? Me too 😉
_Rolf_
--
sumpsi - posui - obstruxi