Rolf B: async await vs. fetch

Beitrag lesen

Hallo Konrad,

await fetch(...).then(...).catch(...)

Nein, so nicht. Entweder await oder then. Es mag Konstrukte geben, wo man das sinnvoll mischt, aber das muss dann schon ein technischer Spezialgrenzfall sein,

async/await ist letztlich Sytaxzucker für Promises mit .then. Vorteil von then ist, dass man keine async-Funktion erstellen muss und den Code auch "einfach so" laufen lassen kann. Nachteil ist die kompliziertere Programmstruktur mit Callbacks.

function getData(url) {
   fetch(url)
   .then(response => response.ok ?
                         response.text() :
                         Promise.reject(response.statusText))
   .then(text => /* Text ins DOM stellen */)
   .catch(error => /* Fehlerbehandlung */
}

async function getDataAsync(url) {
   let response = await fetch(url);
   if (response.ok) {
     let text = await response.text();
     // Text ins DOM stellen
   }
   else {
     // Fehlerbehandlung 
   }
}

tut FAST beides das Gleiche.

Die async-Funktion liefert wiederum ein Promise zurück, allerdings eins, das zu undefined resolved, weil die Funktion kein return-Statement enthält. Aber du kannst drauf warten, dass sie fertig ist.

Die nicht-async-Funktion tut das nicht, dafür müsstest Du "return fetch ..." schreiben.

Und ich finde, die Fehlerbehandlung in der await-Version ist lesbarer.

Rolf

--
sumpsi - posui - obstruxi