JavaScript-beloften uitgelegd: vervolgens catch, Promise.all en veelvoorkomende fouten

  1. Home
  2. Blog
  3. Softwareontwikkeling

Softwareontwikkeling

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.

10 min leestijd
JavaScript-beloften uitgelegd: vervolgens catch, Promise.all en veelvoorkomende fouten

Belangrijkste punten

  • 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 then geeft een nieuwe belofte terug, wat ketening mogelijk maakt.
  • Gebruik Promise.all als elk resultaat vereist is, en Promise.allSettled als 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 een return ontvangt de volgende stap undefined en 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 then in then te 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 forEach met asynchrone callbacks. Er wordt niet gewacht. Gebruik for...of of Promise.all met map, 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

Werk met Stack Quora

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.

Blijf lezen

Meer handleidingen over testen, AI en moderne ontwikkeling

Genoten van dit artikel? Kies een onderwerp en ga direct naar onze nieuwste tutorials.

Kunstmatige intelligentie

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 →
DevOps

Omgevingsvariabelen 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 →
Softwareontwikkeling

API-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 →
Testautomatisering

Spotten 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 →
Softwaretesten

Codedekking 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 & SQL

DELETE 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 & SQL

SQL-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 →
Softwareontwikkeling

TypeScript-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 →
Softwareontwikkeling

Python *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 →
Softwareontwikkeling

Python 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 intelligentie

Wat 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 →
DevOps

Monitoring 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 →
DevOps

Docker-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 →
Testautomatisering

TDD 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 →
Softwaretesten

Gebruikersacceptatietesten (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 & SQL

SQL 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 & SQL

SQL 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 →
Softwareontwikkeling

Wat 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 →
Softwareontwikkeling

JavaScript-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 →
Softwareontwikkeling

Python-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 intelligentie

Wat 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 →
DevOps

Implementatie 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 →
Testautomatisering

Schilferige 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 →
Softwaretesten

Belastingtesten 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 →
Softwaretesten

Testcase 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 & SQL

Optimalisatie 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 & SQL

SQL 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 →
Softwareontwikkeling

JavaScript 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 →
Softwareontwikkeling

Python-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 →
Softwareontwikkeling

Python-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 intelligentie

Wat 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 →
DevOps

Linux-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 →
Testautomatisering

Selenium 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 →
Softwaretesten

Equivalentiepartitionering: testontwerptechniek uitgelegd met uitgewerkte voorbeelden

Equivalentiepartitionering uitgelegd: hoe je geldige en ongeldige partities kunt vinden, uitgewerkte voorbeelden voor leeftijden, wachtwoorden en ko…

Lees artikel →
Softwaretesten

Ernst 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 & SQL

Tutorial 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 & SQL

SQL-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 →
Softwareontwikkeling

Git 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 →
Softwareontwikkeling

JavaScript-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 →
Softwareontwikkeling

Zelfstudie 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 intelligentie

Wat 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 →
DevOps

Terraform-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 →
DevOps

Docker 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 →
Testautomatisering

Pytest-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 →
Softwaretesten

Levenscyclus 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 →
Softwareontwikkeling

Git 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 →
Softwareontwikkeling

Python 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 & SQL

SQL 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 →