JavaScript-beloften uitgelegd: dan catch, Promise.all en veelvoorkomende fouten
Beloften zijn hoe JavaScript omgaat met werk dat later wordt voltooid, en async/await is daar bovenop gebouwd. Ontdek hoe ze zich werkelijk gedragen, met echte resultaten uit elk voorbeeld, en vermijd de fouten die uw fouten opslokken.
- Een belofte is een object dat een resultaat vertegenwoordigt dat later beschikbaar zal zijn.
- Het wacht totdat het óf wordt vervuld óf wordt afgewezen, en als het eenmaal is afgehandeld, verandert het nooit meer.
- Elke
thengeeft een nieuwe belofte terug, wat ketening mogelijk maakt. - Gebruik
Promise.allals elk resultaat vereist is, enPromise.allSettledals je elk resultaat wilt.
Netwerkverzoeken, het lezen van bestanden en timers eindigen allemaal later, maar JavaScript kan niet zomaar stoppen en wachten, anders loopt de pagina vast. JavaScript-beloften geven je een nette manier om te zeggen: “Als dit klaar is, doe dat dan, en als het mislukt, doe dan dit.”
Zelfs als je voornamelijk async en await schrijft, gebruik je de onderliggende beloften, dus als je ze begrijpt, wordt het debuggen veel eenvoudiger. We hebben deze voorbeelden uitgevoerd op Node.js 24 en de weergegeven uitvoer is afkomstig van die run. Ze gedragen zich op dezelfde manier in moderne browsers.
Wat is een belofte?
Een belofte is een tijdelijke aanduiding voor een toekomstige waarde. Denk aan de zoemer die een restaurant je geeft als je bestelt. Je hebt je eten nog niet, maar je hebt iets vast dat je vertelt wanneer het klaar is, of dat er een probleem is, en ondertussen ben je vrij om andere dingen te doen.
In code retourneert een asynchrone functie onmiddellijk een belofte en voegt u toe wat er vervolgens moet gebeuren:
fetch("/api/user")
.then((response) => response.json())
.then((user) => console.log(user.name))
.catch((error) => console.log("Failed:", error.message));
De drie beloftestaten
| Staat | Betekenis | Wat loopt |
|---|---|---|
| In behandeling | Het werk is nog niet klaar | Nog niets |
| Vervuld | Het eindigde met een waarde | then begeleiders |
| Afgewezen | Het mislukte met een reden | catch begeleiders |
Een belofte die wordt nagekomen of afgewezen, wordt settled genoemd. Een belofte kan maar één keer vervuld worden. Daarna worden de status en waarde ervan vastgesteld en worden latere oproepen naar resolve of reject genegeerd.
Creëer een belofte
Normaal gesproken consumeer je beloften van API’s zoals fetch, maar als je er een maakt, zie je hoe ze werken. De constructor ontvangt twee functies, resolve en reject:
function fetchUser(id) {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (id > 0) {
resolve({ id, name: "Asha" });
} else {
reject(new Error("Invalid id"));
}
}, 100);
});
}
console.log(fetchUser(1));
// Promise { <pending> }
Als u de belofte meteen registreert, ziet u dat deze nog steeds in behandeling is, omdat de timer niet is geactiveerd. De waarde kan alleen worden bereikt via een handler of await. Weiger altijd met een Error object in plaats van met een string, aangezien een Error een stacktrace bevat die helpt bij het opsporen van fouten.
dan, vangen en tenslotte
Deze drie methoden koppelen handlers aan een belofte:
fetchUser(1).then((user) => console.log(user.name));
// Asha
fetchUser(-1)
.then((user) => console.log("never runs", user))
.catch((error) => console.log("caught:", error.message))
.finally(() => console.log("finally"));
// caught: Invalid id
// finally
then draait op succes, catch draait op mislukking en finally draait in beide richtingen. Dat maakt finally de juiste plek voor opruimwerk, zoals het verbergen van een laadspinner. Het krijgt geen argumenten, omdat het zich niets zou moeten aantrekken van de uitkomst.
Beloftes aan elkaar rijgen
Het belangrijkste idee is dat then altijd een nieuwe belofte teruggeeft. Wat uw begeleider ook retourneert, wordt de waarde van die nieuwe belofte:
Promise.resolve(2)
.then((n) => n * 10)
.then((n) => n + 1)
.then((n) => console.log("chain:", n));
// chain: 21
Als een afhandelaar een andere belofte teruggeeft, wacht de keten tot deze is afgehandeld voordat hij verder gaat. Dit is wat geneste callbacks omzet in een vlakke reeks stappen:
getUser(id)
.then((user) => getOrders(user.id))
.then((orders) => getInvoice(orders[0].id))
.then((invoice) => console.log(invoice.total))
.catch(handleError);
Hoe fouten zich door een keten verplaatsen
Een afgewezen belofte slaat elke then over totdat hij een catch bereikt. Het naar binnen gooien van een geleider geldt ook als een afwijzing. En een catch die normaal terugkeert, brengt de keten weer op het goede spoor:
Promise.resolve("start")
.then(() => {
throw new Error("step 2 failed");
})
.then(() => console.log("skipped"))
.catch((error) => {
console.log("caught:", error.message);
return "recovered";
})
.then((value) => console.log("continues:", value));
// caught: step 2 failed
// continues: recovered
Beschouw dit als de asynchrone versie van try en catch. Eén catch aan het eind bestrijkt meestal de hele keten. Als je alleen een fout wilt registreren en nog steeds niet slaagt, gooi deze dan opnieuw vanuit de catch.
Tip: fetch weigert alleen vanwege netwerkstoringen. Een 404- of 500-antwoord voldoet nog steeds, dus controleer response.ok zelf. In ons spiekbriefje voor HTTP-statuscodes wordt uitgelegd wat elke code betekent.
Promise.all, allSettled, ras en wat dan ook
Deze statische methoden coördineren meerdere beloften tegelijk. Ze nemen allemaal een array en geven één belofte terug.
| Methode | Vervult wanneer | Weigert wanneer | Gebruik het voor |
|---|---|---|---|
Promise.all |
Allemaal vervullen | Iedereen wijst af | Alle resultaten zijn vereist |
Promise.allSettled |
Allemaal regelen | Nooit | Je wilt elk resultaat |
Promise.race |
De eerste die zich vestigt, vervult | De eerste die afwijzingen regelt | Time-outs |
Promise.any |
De eerste vervult | Allemaal afwijzen | De eerste succesvolle bron |
Om ze te testen hebben we twee kleine helpers gebruikt, één die na vertraging slaagt en één die na vertraging faalt:
const wait = (ms, value) =>
new Promise((resolve) => setTimeout(() => resolve(value), ms));
const fail = (ms, message) =>
new Promise((_, reject) => setTimeout(() => reject(new Error(message)), ms));
Promise.all
await Promise.all([wait(300, "a"), wait(100, "b"), wait(200, "c")]);
// [ 'a', 'b', 'c' ] took about 300 ms
Twee details om op te merken. De resultaten behouden de invoervolgorde, ook al eindigde b als eerste. En de totale tijd was ongeveer 300 ms, de tijd van de langzaamste taak en niet de som van 600 ms, omdat ze alle drie al tegelijk liepen. Als een van hen afwijst, wijst de hele zaak meteen af:
await Promise.all([wait(100, "a"), fail(50, "b failed")]);
// rejected: b failed
Promise.allSettled
Deze wacht op alles en rapporteert elk resultaat, zodat één fout de rest niet verliest. Het past bij een dashboard waarbij elke widget onafhankelijk wordt geladen:
const results = await Promise.allSettled([wait(50, "a"), fail(50, "b failed")]);
results.map((r) => r.status);
// [ 'fulfilled', 'rejected' ]
Promise.race en Promise.any
await Promise.race([wait(300, "slow"), wait(100, "fast")]); // fast
await Promise.any([fail(50, "x"), wait(100, "ok")]); // ok
Het verschil is dat race de eerste is die tot een oplossing komt, zelfs als het mislukt, terwijl any mislukkingen negeert zolang iets slaagt. Een klassiek gebruik van race is het toevoegen van een time-out aan een langzaam verzoek, hoewel de langzamere taak op de achtergrond blijft draaien, tenzij je deze annuleert.
Beloften en async/wachten
async en await zijn een beter leesbare manier om met dezelfde beloften te werken. Een functie async retourneert altijd een belofte, en await pauzeert die functie totdat een belofte wordt vervuld:
async function showInvoice(id) {
try {
const user = await getUser(id);
const orders = await getOrders(user.id);
console.log(orders.length);
} catch (error) {
console.log("Failed:", error.message);
}
}
Afwijzingen worden foutieve fouten, dus gewone try en catch werken. Voor parallel werk heb je nog steeds Promise.all nodig, want bij het wachten op de ene oproep na de andere worden ze op volgorde uitgevoerd. Onze JavaScript async/await-handleiding gaat hier dieper op in.
Beloften en de evenementenlus
Beloftebehandelaars worden nooit onmiddellijk gebeld, zelfs niet als de belofte al is voldaan. Ze worden uitgevoerd nadat de huidige code is voltooid en vóór eventuele timers. Hier is het bewijs:
setTimeout(() => console.log("timeout"), 0);
Promise.resolve().then(() => console.log("microtask"));
console.log("sync");
// sync
// microtask
// timeout
Synchrone code wordt eerst uitgevoerd. Vervolgens komt de microtask-wachtrij, die belofte-handlers bevat. Pas dan pikt de gebeurtenislus de volgende taak op, zoals een timer. Dit is een populaire interviewvraag en het verklaart waarom een setTimeout van nul niet echt onmiddellijk is.
Beloften versus terugbellen
| Bezorgdheid | Terugbelgesprekken | Beloften |
|---|---|---|
| Sequencing | Genesteld, dieper bij elke stap | Een platte ketting |
| Fouten | Gecontroleerd op elk niveau | Eén catch kan de keten bestrijken |
| Parallel werk | Handmatige tellers | Promise.all |
| Per ongeluk twee keer gebeld? | Mogelijk | Kan niet twee keer afrekenen |
Veel voorkomende fouten
- Vergeten naar binnen terug te keren
then. Zonder eenreturnontvangt de volgende stapundefineden wacht niet op je innerlijke belofte. - Helemaal niet
catch. Dit veroorzaakt een onverwerkte afwijzing en in Node.js stopt dit het proces standaard. - Nesten in plaats van ketenen. Door
theninthente plaatsen, wordt de callback-hel opnieuw gecreëerd. Geef de belofte terug en zet de keten voort. - Een belofte inpakken in
new Promise. Als een functie al een belofte retourneert, gebruik deze dan gewoon. - Gebruik
forEachmet asynchrone callbacks. Er wordt niet gewacht. Gebruikfor...ofofPromise.allmetmap, zoals weergegeven in onze handleiding voor JavaScript-arraymethoden. - Denk dat een belofte kan worden ingetrokken. Dat kan niet op zichzelf. Gebruik voor verzoeken
AbortController.
Tot slot
Beloftes komen neer op een paar regels: een belofte wordt één keer vervuld, then geeft een nieuwe belofte terug, en fouten reizen door de keten totdat iets hen opvalt. Zodra deze regels natuurlijk aanvoelen, zijn async en await niet meer magisch. Om te oefenen herschrijft u één op callback gebaseerde functie met behulp van beloften, haalt u vervolgens twee eindpunten op met Promise.all en handelt u een fout op de juiste manier af.
Veelgestelde vragen
Wat is een belofte in JavaScript?
Een belofte is een object dat het uiteindelijke resultaat van asynchroon werk vertegenwoordigt. Het begint als in behandeling en wordt vervolgens vervuld met een waarde of wordt afgewezen met een reden.
Wat is het verschil tussen dan en vangen?
loopt dan weg als een belofte wordt vervuld, en loopt als de belofte wordt afgewezen. catch werkt dan effectief met alleen een afwijzingshandler, en het kan ook fouten opvangen die in eerdere stappen zijn gegenereerd.
Wat is het verschil tussen Promise.all en Promise.allSettled?
Promise.all wijst af zodra één belofte afwijst. Promise.allSettled wacht altijd op ze allemaal en rapporteert de status en waarde of reden van elk van hen.
Moet ik beloften of async/afwachten gebruiken?
Ze werken samen, want wachten is gebaseerd op beloften. De meeste code leest het beste met async/await, terwijl Promise.all en vergelijkbare methoden nuttig blijven voor parallel werk.
Lopen beloften parallel?
JavaScript voert één stukje code tegelijk uit op een thread, maar werkt alsof netwerkverzoeken op de achtergrond plaatsvinden. Er kunnen er meerdere tegelijk aan de gang zijn.
Blijf leren
Hulp nodig met testen, WordPress of SEO?
We helpen teams betere software te leveren en hun sites te laten groeien. Vertel ons waar u mee bezig bent en wij stellen een duidelijke volgende stap voor.
Meer handleidingen over testen, AI en moderne ontwikkeling
Genoten van dit artikel? Kies een onderwerp en ga direct naar onze nieuwste tutorials.
AI-hallucinaties uitgelegd: waarom taalmodellen dingen verzinnen en hoe ze te verminderen
AI-hallucinaties uitgelegd: wat ze zijn, waarom taalmodellen ze produceren, veelvoorkomende typen, hoe je ze kunt verminderen met aarding en aanwijz…
Lees artikel →DevOpsOmgevingsvariabelen uitgelegd: .env-bestanden, geheimen en configuratie goed gedaan
Omgevingsvariabelen uitgelegd met Python-voorbeelden die we hebben uitgevoerd: ze lezen en instellen, waarom elke waarde een string is, .env-bestand…
Lees artikel →SoftwareontwikkelingAPI-snelheidsbeperking uitgelegd: algoritmen, headers en afhandeling van 429-fouten
API-snelheidsbeperking uitgelegd met een simulatie die we hebben uitgevoerd: token-bucket, vast venster, schuifvenster, 429 reacties, headers van sn…
Lees artikel →TestautomatiseringSpotten in Python: unittest.mock, patch en de fouten die tests doen liegen
Spotten in Python met unittest.mock, getest: Mock en return_value, side_effect, patchen waar een naam wordt gebruikt, spec en autospec, spotdatums e…
Lees artikel →SoftwaretestenCodedekking uitgelegd: lijn versus filiaaldekking en wat 100% werkelijk betekent
Codedekking uitgelegd met een echte dekking.py-run: dekking van lijnen, vertakkingen en condities, een rapport lezen, waarom 100% dekking nog steeds…
Lees artikel →Databases & SQLDELETE versus TRUNCATE versus DROP in SQL: verschillen, terugdraaien en wanneer elk te gebruiken
DELETE versus TRUNCATE versus DROP uitgelegd met geteste SQL: wat elk verwijdert, terugdraaien, triggers, identiteitsreset, snelheid en hoe PostgreS…
Lees artikel →Databases & SQLSQL-weergaven uitgelegd: creëer, gebruik en vermijd de valkuilen, met voorbeelden
SQL-weergaven uitgelegd met query's die we hebben uitgevoerd: een weergave maken, live resultaten, kolommen verbergen, prestaties, bijwerkbare en ge…
Lees artikel →SoftwareontwikkelingTypeScript-interface versus type: echte verschillen, getest met de compiler
TypeScript-interface versus type, gecontroleerd met de echte compiler: wat beide kunnen doen, wat slechts één kan doen, samenvoegen van declaraties,…
Lees artikel →SoftwareontwikkelingPython *args en **kwargs uitgelegd: flexibele functies met duidelijke voorbeelden
Python *args en **kwargs uitgelegd met code die we hebben uitgevoerd: in- en uitpakken, parametervolgorde, argumenten die alleen trefwoorden en posi…
Lees artikel →SoftwareontwikkelingPython Lambda-functies: syntaxis, echt gebruik en wanneer u ze niet moet gebruiken
Python lambda-functies uitgelegd met code die we hebben uitgevoerd: syntaxis, sorteren met sleutel, kaart en filter, sluitingen, de laat-bindende va…
Lees artikel →Kunstmatige intelligentieWat zijn AI-agenten? Hoe ze werken, met een eenvoudige agentloop die u kunt uitvoeren
Wat zijn AI-agenten? Een duidelijke gids voor de agentenlus, tools, geheugen en vangrails, met een kleine Python-lus die we hebben uitgevoerd, echte…
Lees artikel →DevOpsMonitoring versus waarneembaarheid: het echte verschil, met logboeken, statistieken en sporen
Monitoring versus waarneembaarheid uitgelegd: bekende en onbekende fouten, logboeken, statistieken en sporen, een walkthrough voor afrekenincidenten…
Lees artikel →DevOpsDocker-volumes versus bindingsmounts: bewaar containergegevens op de juiste manier
Docker-volumes versus bind-mounts uitgelegd: waarom containergegevens verdwijnen, benoemde volumes, bind-mounts, tmpfs, Compose-voorbeelden, back-up…
Lees artikel →TestautomatiseringTDD versus BDD: belangrijkste verschillen, één functie die op beide manieren is gebouwd en wanneer deze moet worden gebruikt
TDD versus BDD uitgelegd met één kortingsfunctie die in beide richtingen is gebouwd: rood-groen-refactor met code die we hebben uitgevoerd, gegeven-…
Lees artikel →SoftwaretestenGebruikersacceptatietesten (UAT): proces, checklist en echte voorbeelden
Gebruikersacceptatietesten uitgelegd: wie voert het uit, hoe het verschilt van QA, een proces in zeven stappen, een UAT-testcase-sjabloon, een check…
Lees artikel →Databases & SQLSQL NULL-waarden uitgelegd: IS NULL, COALESCE, NULLIF en de te vermijden vallen
SQL NULL-waarden uitgelegd met query's die we hebben uitgevoerd: logica met drie waarden, IS NULL, COALESCE, NULLIF, hoe aggregaten, joins en sorter…
Lees artikel →Databases & SQLSQL CASE WHEN-instructie: syntaxis, echte voorbeelden en veelvoorkomende fouten
SQL CASE WHEN uitgelegd met vragen die we hebben uitgevoerd: eenvoudige en doorzochte formulieren, volgorde van de voorwaarden, draaipunten met SUM,…
Lees artikel →SoftwareontwikkelingWat is JWT? JSON-webtokens uitgelegd met een werkend voorbeeld
Wat is JWT? JSON Web Tokens uitgelegd: de drie delen, een token gebouwd en waarmee is geknoeid in de code die we hebben uitgevoerd, JWT versus sessi…
Lees artikel →SoftwareontwikkelingJavaScript-gebeurtenislus uitgelegd: call-stack, microtaken en timers met voorbeelden
De JavaScript-gebeurtenislus uitgelegd met code die we hebben uitgevoerd: call-stack, taak- en microtask-wachtrijen, waarom setTimeout 0 niet onmidd…
Lees artikel →SoftwareontwikkelingPython-generatoren en opbrengst uitgelegd: bespaar geheugen met echte voorbeelden
Python-generatoren en opbrengst uitgelegd met code die we hebben uitgevoerd: hoe ze pauzeren en hervatten, gemeten geheugenbesparingen, pijplijnen, …
Lees artikel →Kunstmatige intelligentieWat zijn inbeddingen? Vectoren en cosinusovereenkomst eenvoudig uitgelegd
Wat zijn insluitingen? Een gids in duidelijke taal over vectoren, cosinusovereenkomst en semantisch zoeken, met een klein voorbeeld dat we hebben ui…
Lees artikel →DevOpsImplementatie van blauwgroen versus kanarie: verschillen, afwegingen en hoe te kiezen
Blauw-groen versus kanarie-implementatie uitgelegd: hoe elk werkt, kosten, risico's en terugdraaien, stabiele gebruikersbucket die we hebben getest,…
Lees artikel →TestautomatiseringSchilferige tests: wat de oorzaak ervan is en hoe u ze voorgoed kunt oplossen
Zwakke tests uitgelegd met demo's die we hebben uitgevoerd: de belangrijkste oorzaken, hoe je er een kunt bevestigen en diagnosticeren, goede oploss…
Lees artikel →SoftwaretestenBelastingtesten versus stresstesten: verschillen, statistieken en k6-voorbeelden
Belastingtesten versus stresstesten uitgelegd: wat elk bewijst, piek- en soak-tests, de statistieken die er toe doen, waarom gemiddelden misleiden, …
Lees artikel →SoftwaretestenTestcase versus testscenario: belangrijkste verschillen, voorbeelden en wanneer deze te gebruiken
Testcase versus testscenario uitgelegd: duidelijke definities, een tabel naast elkaar, één functie voor het opnieuw instellen van wachtwoorden, over…
Lees artikel →Databases & SQLOptimalisatie van SQL-query's: lees uitvoeringsplannen en repareer langzame query's, met timing
Optimalisatie van SQL-query's getest op een miljoen rijen: lees uitvoeringsplannen, voeg de juiste indexen toe, repareer niet-sargeerbare filters, g…
Lees artikel →Databases & SQLSQL UNION versus UNION ALL: verschillen, voorbeelden en geteste prestaties
SQL UNION versus UNION ALL uitgelegd met de query's die we hebben uitgevoerd: duplicaten, de regels volgen beide, een echte databug, gemeten prestat…
Lees artikel →SoftwareontwikkelingJavaScript Fetch API-tutorial: GET, POST, foutafhandeling en time-outs
Een JavaScript Fetch API-tutorial getest tegen een lokale server: GET en POST, waarom 404 niet gooit, een herbruikbare helper, queryreeksen, time-ou…
Lees artikel →SoftwareontwikkelingPython-bestandsverwerking: lezen, schrijven, CSV, JSON en pathlib met voorbeelden
Het verwerken van Python-bestanden uitgelegd met code die we hebben uitgevoerd: open modi, met het lezen van grote bestanden, CSV, JSON, pathlib, bi…
Lees artikel →SoftwareontwikkelingPython-klassen en -objecten: OOP-zelfstudie met echte voorbeelden
Python-klassen en -objecten uitgelegd met code die we hebben uitgevoerd: __init__, methoden, klasse versus instantie-attributen, overerving, eigensc…
Lees artikel →Kunstmatige intelligentieWat is een groot taalmodel? Hoe LLM's werken, uitgelegd zonder de hype
Wat is een groot taalmodel? LLM's uitgelegd in duidelijke taal: tokens, inbedding, aandacht, training, temperatuur- en contextvensters, een kleine d…
Lees artikel →DevOpsLinux-opdrachten voor beginners: de essentiële terminalgids met voorbeelden
Linux-opdrachten voor beginners, gegroepeerd op taak: navigatie, bestanden, logboeken bekijken, grep, pipelines, machtigingen, processen en archieve…
Lees artikel →TestautomatiseringSelenium versus toneelschrijver: belangrijkste verschillen, code vergeleken en welke te kiezen
Selenium versus Playwright vergeleken: architectuur, wachten, browser- en taalondersteuning, debuggen, dezelfde test in beide tools, migratieadvies …
Lees artikel →SoftwaretestenEquivalentiepartitionering: testontwerptechniek uitgelegd met uitgewerkte voorbeelden
Equivalentiepartitionering uitgelegd: hoe je geldige en ongeldige partities kunt vinden, uitgewerkte voorbeelden voor leeftijden, wachtwoorden en ko…
Lees artikel →SoftwaretestenErnst versus prioriteit bij het testen van software: verschillen, matrix en echte voorbeelden
Ernst versus prioriteit bij het testen van software uitgelegd: duidelijke definities, een vierwegmatrix met voorbeelden, niveauschalen, wie deze bep…
Lees artikel →Databases & SQLTutorial voor SQL-subquery's: typen, gecorreleerde subquery's en BESTAAN met voorbeelden
Een SQL-subquery-tutorial met query's die we hebben uitgevoerd: scalaire, IN-, FROM- en SELECT-subquery's, gecorreleerde subquery's, EXISTS, de NOT …
Lees artikel →Databases & SQLSQL-transacties en ACID uitgelegd: COMMIT-, ROLLBACK- en isolatieniveaus
SQL-transacties en ACID uitgelegd met een bankoverschrijving die we hebben uitgevoerd: COMMIT, ROLLBACK, savepoints, locks, isolatieniveaus, dirty r…
Lees artikel →SoftwareontwikkelingGit Commands Cheat Sheet: de commando's die je daadwerkelijk gebruikt, met voorbeelden
Een spiekbriefje voor Git-opdrachten, gegroepeerd op taak: setup, staging, branches, remotes, stash, geschiedenis en fouten ongedaan maken, met uitv…
Lees artikel →SoftwareontwikkelingJavaScript-beloften uitgelegd: vervolgens catch, Promise.all en veelvoorkomende fouten
JavaScript-beloften uitgelegd met code die we hebben uitgevoerd: staten, dan en catch-ketens, foutafhandeling, Promise.all, allSettled, race en wat …
Lees artikel →SoftwareontwikkelingZelfstudie Python-woordenboek: methoden, voorbeelden en veelvoorkomende patronen
Een Python-woordenboektutorial met code die we hebben uitgevoerd: dictaten, sleutelmethoden, samenvoeg-, begrips-, tel- en groeperingspatronen en ve…
Lees artikel →Kunstmatige intelligentieWat is RAG? Retrieval-Augmented Generation uitgelegd met een werkend voorbeeld
Wat is RAG? Retrieval-augmented generatie stap voor stap uitgelegd: indexeren, chunken, insluiten, ophalen, een klein werkend Python-voorbeeld, eval…
Lees artikel →DevOpsTerraform-zelfstudie voor beginners: infrastructuur als code van het eerste bestand tot modules
Een Terraform-tutorial voor beginners: begin zonder cloudaccount, leer init, plan en pas toe, vervolgens variabelen, outputs, status, modules en een…
Lees artikel →DevOpsDocker versus Kubernetes: belangrijkste verschillen, hoe ze samenwerken en welke u nodig heeft
Docker vs Kubernetes legde uit: wat elk doet, dezelfde app draait met beide, Docker Compose en Swarm vergeleken, de dockershim veranderen en hoe je …
Lees artikel →TestautomatiseringPytest-tutorial voor beginners: armaturen, parametriseren en echte voorbeelden
Een pytest-tutorial voor beginners met tests die we hebben uitgevoerd op pytest 9.2: beweringen, armaturen, parametrize, conftest, markers, tmp_path…
Lees artikel →SoftwaretestenLevenscyclus van softwaretests (STLC): 6 fasen, in- en uitgangscriteria, voorbeeld
De levenscyclus van softwaretesten uitgelegd: zes STLC-fasen met in- en uitstapcriteria, deliverables, een voorbeeld van een uitgewerkte inlogfuncti…
Lees artikel →SoftwareontwikkelingGit merge vs rebase: verschillen, voorbeelden en wanneer je wat gebruikt
Git merge vs rebase uitgelegd met echte logoutput, een vergelijkingstabel, de gouden regel van rebase en een veilige teamwerkwijze.
Lees artikel →SoftwareontwikkelingPython list comprehension: syntaxis, voorbeelden en wanneer je het vermijdt
Python list comprehension uitgelegd: syntaxis, filteren, if-else, geneste lussen, gemeten tijden en wanneer een gewone for-lus beter is.
Lees artikel →Databases & SQLSQL JOIN uitgelegd met voorbeelden (Inner, Left, Right, Full)
Begrijp SQL joins stap voor stap met voorbeeldtabellen en queries: INNER, LEFT, RIGHT, FULL, CROSS en SELF, plus veelgemaakte fouten en prestatietips.
Lees artikel →