Direkt zum Hauptinhalt springen
eLearner.app
Modul 7 · Lektion 2 von 426/32 im Kurs~12 min
Lektionen des Moduls (2/4)

async / await

async/await ist eine übersichtlichere Syntax für die Arbeit mit Promises: Der Code liest sich wie synchroner Code, verwendet aber im Hintergrund genau die gleichen Promises wie in der vorherigen Lektion.

async function

Eine mit async deklarierte Funktion gibt immer ein Promise zurück.

JS
async function quaranta() {
  return 40;
}

quaranta(); // Promise { 40 }
quaranta().then((v) => console.log(v)); // 40

Selbst wenn du einen „normalen“ Wert zurückgibst, verpackt die Funktion diesen in ein aufgelöstes Promise.

await

Innerhalb einer async function kannst du await vor ein Promise schreiben: Die Ausführung wird angehalten, bis das Promise aufgelöst ist, und fährt dann mit dem aufgelösten Wert fort.

Code
async function somma() {
  const a = await Promise.resolve(10);
  const b = await Promise.resolve(20);
  return a + b; // 30
}

Äquivalent im .then-Stil (ausführlicher):

JS
function somma() {
  return Promise.resolve(10).then((a) => Promise.resolve(20).then((b) => a + b));
}

await reicht Fehler weiter

Wenn das Promise abgelehnt (rejected) wird, wirft await den Fehler erneut. Du kannst ihn mit einem ganz normalen try/catch abfangen:

JS
async function leggi() {
  try {
    const x = await Promise.reject(new Error('no'));
    return x;
  } catch (err) {
    return 'errore: ' + err.message;
  }
}

leggi(); // Promise { 'errore: no' }

Asynchrone Arrow-Funktionen

JS
const raddoppia = async (n) => n * 2;
raddoppia(5); // Promise { 10 }

Probier es aus

Übung#js.m7.l2.e1
Versuche: 0Wird geladen…

Definiere eine `async function addOne(p)`: Erhält ein Promise, das eine Zahl liefert, und gibt (als Promise) die Zahl + 1 zurück. Verwende await.

Editor wird geladen…
Hinweis anzeigen

const n = await p; return n + 1;

Lösung nach 3 Versuchen verfügbar

Wiederholungsübung

Übung#js.m7.l2.e2
Versuche: 0Wird geladen…

Definiere `sumTwo(pa, pb)` als async: Erhält zwei Promises, die Zahlen liefern, und gibt deren Summe zurück. Verwende zwei aufeinanderfolgende awaits.

Editor wird geladen…
Hinweis anzeigen

await ognuna, poi return a + b.

Lösung nach 3 Versuchen verfügbar