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.
async function forty() {
return 40;
}
forty(); // Promise { 40 }
forty().then((v) => console.log(v)); // 40Zelfs 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.
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):
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:
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
const double = async (n) => n * 2;
double(5); // Promise { 10 }Probeer het
Definieer een `asynchrone functie addOne(p)` die een belofte van een getal ontvangt en (als belofte) het getal + 1 retourneert. Gebruik await.
Toon hint
const n = wacht op p; retour n + 1;
Oplossing beschikbaar na 3 pogingen
Oefening beoordelen
Definieer `sumTwo(pa, pb)` async: ontvangt twee beloften van getallen, retourneert hun som. Gebruik twee opeenvolgende wachttijden.
Toon hint
wacht op iedereen en retourneer dan a + b.
Oplossing beschikbaar na 3 pogingen