Labo 20 - Promises
Zorg ervoor dat je onderstaande folderstructuur aanhoudt:
webtechnologie/
├─ labo-x/
│ ├─ oefening-01/
│ │ ├─ index.html
│ │ ├─ assets/
│ │ │ ├─ image-1.jpg
│ │ │ ├─ data.json
│ │ ├─ css/
│ │ │ ├─ reset.css
│ │ │ ├─ style.css
│ │ ├─ js/
│ │ │ ├─ script.js
│ ├─ oefening-02/
│ ├─ oefening-n/
├─ labo-y/
├─ labo-z/
Technische richtlijnen:
Gebruik steeds ES modules om globale variabelen te vermijden:
<script type="module" src="./path/to/script.js" defer></script>
Zet bovenaan elk script
"use strict";
om strikte modus in te schakelen.Volg de Coding Guidelines.
Oefening 1 – Notificatie-toestemming vragen via een Promise
Leerdoelen
Je begrijpt hoe
Notification.requestPermission()
werkt als een Promise.Je leert reageren op de uitkomst van een permissie-aanvraag.
Opdracht
Vraag toestemming aan de gebruiker om notificaties te tonen via de Notifications API:
Roep
Notification.requestPermission()
automatisch aan wanneer de pagina geladen is.Als de gebruiker toestemming geeft, toon dan een notificatie met de tekst: "Hello world".
Als de gebruiker weigert, toon dan in de console: "Toestemming geweigerd".
Oefening 2 – Een eigen Promise gebruiken
Leerdoelen
Je leert hoe je zelf een Promise maakt.
Je oefent met het verwerken van asynchrone resultaten.
Opdracht
Gebruik onderstaande functie die een vermenigvuldiging uitvoert na 5 seconden:
const multiply = (number1, number2) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(number1 * number2);
}, 5000);
});
};
Roep deze functie aan met twee willekeurige getallen, bijvoorbeeld
multiply(4, 7)
.Wacht op het resultaat met
.then()
.Voorzie een
catch
-blok voor het geval er een fout optreedt.Toon het resultaat in de console.
De setTimeout
simuleert een trage bewerking.
Oefening 3 – Promise chaining
Leerdoelen
Je leert hoe je meerdere asynchrone stappen aan elkaar koppelt.
Je oefent met het doorgeven van resultaten tussen
.then()
-blokken.
Opdracht
Werk verder met de multiply()
-functie:
Vermenigvuldig twee getallen met
multiply()
en toon het resultaat.Gebruik dat resultaat als input voor een nieuwe
multiply(result, 2)
-aanroep.Herhaal dit proces minstens vijf keer.
Toon telkens het tussenresultaat in de console.
Vermijd geneste .then()
-blokken. Schrijf ze op één niveau (flat).
Tip: om testing wat gemakkelijker te maken, verlaag je de timing van de timeout-functie binnen multiply.
Oefening 4 – Foutafhandeling in Promise chains
Leerdoelen
Je leert hoe je fouten afvangt in een Promise chain.
Je begrijpt hoe
throw
werkt binnen een.then()
.
Opdracht
Bouw verder op oefening 3:
Laat ergens halverwege in de chain een fout ontstaan met
throw new Error("foutboodschap")
.Zorg dat de fout correct wordt afgehandeld met
.catch()
.Toon de foutboodschap in de console.
Oefening 5 – async/await
syntax
async/await
syntaxLeerdoelen
Je leert het alternatief voor
.then()
en.catch()
metasync/await
.Je oefent met het schrijven van leesbare asynchrone functies.
Opdracht
Herschrijf oefening 1 t.e.m. 4 met async/await
in plaats van .then()
en .catch()
.
Zorg dat je gebruik maakt van try
/catch
om fouten correct op te vangen bij await
.
Last updated