Direct naar de hoofdinhoud
Module 7 · Les 2 van 426/32 in de cursus~12 min
Modulelessen (2/4)

asynchroon / wachten

async/await is een duidelijkere syntaxis voor het werken met Promises: de code leest als synchrone code, maar achter de schermen worden precies dezelfde beloften gebruikt als in de vorige les.

async function

Een functie gedeclareerd met async retourneert altijd een belofte.

JS
async function forty() {
  return 40;
}

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

Zelfs als u een "normale" waarde retourneert, verpakt de functie deze in een opgeloste belofte.

await

In een async function kun je await vóór een belofte plaatsen: uitvoering is gepauzeerd totdat de belofte is afgehandeld, en gaat dan verder met de opgeloste waarde.

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

Equivalent in .then stijl (meer uitgebreid):

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

await verspreidt fouten

Als de belofte afgewezen is, geeft await de fout opnieuw weer. Je kunt het vangen met een normale try/catch:

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

read(); // Promise { 'error: no' }

Pijl asynchroon

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

Probeer het

Oefening#js.m7.l2.e1
Pogingen: 0Laden…

Definieer een `asynchrone functie addOne(p)` die een belofte van een getal ontvangt en (als belofte) het getal + 1 retourneert. Gebruik await.

Editor laden…
Toon hint

const n = wacht op p; retour n + 1;

Oplossing beschikbaar na 3 pogingen

Oefening beoordelen

Oefening#js.m7.l2.e2
Pogingen: 0Laden…

Definieer `sumTwo(pa, pb)` async: ontvangt twee beloften van getallen, retourneert hun som. Gebruik twee opeenvolgende wachttijden.

Editor laden…
Toon hint

wacht op iedereen en retourneer dan a + b.

Oplossing beschikbaar na 3 pogingen