{"id":3044,"date":"2020-09-02T08:51:00","date_gmt":"2020-09-02T08:51:00","guid":{"rendered":"http:\/\/the-codest.localhost\/blog\/asynchronous-and-single-threaded-javascript-meet-the-event-loop\/"},"modified":"2026-04-24T11:34:04","modified_gmt":"2026-04-24T11:34:04","slug":"asynchroon-en-single-threaded-javascript-ontmoet-de-event-loop","status":"publish","type":"post","link":"https:\/\/thecodest.co\/nl\/blog\/asynchronous-and-single-threaded-javascript-meet-the-event-loop\/","title":{"rendered":"Asynchroon en single-threaded JavaScript?"},"content":{"rendered":"<ul class=\"wp-block-list\">\n<li><strong>Runtime<\/strong><\/li>\n<\/ul>\n\n\n\n<p><a href=\"https:\/\/thecodest.co\/nl\/blog\/hire-javascript-developer\/\">JavaScript<\/a> is een ge\u00efnterpreteerde taal, geen gecompileerde. Dit betekent dat het een interpreter nodig heeft die de <a href=\"https:\/\/thecodest.co\/nl\/blog\/hire-vue-js-developers\/\">JS<\/a> <a href=\"https:\/\/thecodest.co\/nl\/dictionary\/what-is-code-refactoring\/\">code<\/a> naar een machinecode. Er zijn verschillende soorten interpreters (engines genoemd). De populairste browser engines zijn V8 (Chrome), Quantum (Firefox) en WebKit (Safari). Overigens wordt V8 ook gebruikt in een populaire niet-browser runtime, <a href=\"https:\/\/thecodest.co\/nl\/blog\/find-your-node-js-expert-for-hire-today\/\">Node.js<\/a>.<\/p>\n\n\n\n<p>Elke engine bevat een memory heap, een call stack, een event loop, een callback queue en een WebAPI met HTTP requests, timers, events, etc., allemaal op hun eigen manier ge\u00efmplementeerd voor een snellere en veiligere interpretatie van de JS code.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/app\/uploads\/2024\/05\/runtime-architecture.png\" alt=\"JavaScript ontwikkeling\" title=\"JavaScript ontwikkeling\"\/><\/figure>\n\n\n\n<p><em>Basis JS runtime-architectuur. Auteur: Alex Zlatkov<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Enkele draad<\/strong><\/h2>\n\n\n\n<p>Een single-thread taal is een taal met een enkele aanroepstapel en een enkele geheugenhoop. Dit betekent dat er maar \u00e9\u00e9n ding tegelijk wordt uitgevoerd.<\/p>\n\n\n\n<p>A&nbsp;<code>stapel<\/code>&nbsp;is een doorlopend geheugengebied, dat lokale context toewijst voor elke uitgevoerde functie.<\/p>\n\n\n\n<p>A&nbsp;<code>hoop<\/code>&nbsp;is een veel groter gebied, waarin alles wordt opgeslagen dat dynamisch wordt toegewezen.<\/p>\n\n\n\n<p>A&nbsp;<code>oproepstapel<\/code>&nbsp;is een <a href=\"https:\/\/thecodest.co\/nl\/blog\/app-data-collection-security-risks-value-and-types-explored\/\">gegevens<\/a> structuur die vastlegt waar we ons in het programma bevinden.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Stapel oproepen<\/strong><\/h3>\n\n\n\n<p>Laten we een eenvoudige code schrijven en bijhouden wat er gebeurt op de aanroepstapel.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/app\/uploads\/2024\/05\/stack.gif\" alt=\"JavaScript softwareontwikkeling\" title=\"JavaScript softwareontwikkeling\"\/><\/figure>\n\n\n\n<p>Zoals je kunt zien, worden de functies toegevoegd aan de stack, uitgevoerd en later verwijderd. Het is de zogenaamde LIFO manier - Last In, First Out. Elk item in de aanroepstapel wordt een&nbsp;<code>stapelframe<\/code>.<\/p>\n\n\n\n<p>Kennis van de aanroepstapel is nuttig voor het lezen van foutstapelsporen. Over het algemeen staat de exacte reden voor de fout bovenaan in de eerste regel, hoewel de volgorde van code-uitvoering bottom-up is.<\/p>\n\n\n\n<p>Soms kunt u te maken krijgen met een populaire fout, gemeld door\u00a0<code>Maximale grootte aanroepstapel overschreden<\/code>. Het is eenvoudig om dit te krijgen met behulp van recursie:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">functie foo() {\n    foo()\n}\nfoo()<\/code><\/pre>\n\n\n\n<p>en onze browser of terminal loopt vast. Elke browser, zelfs de verschillende versies, heeft een andere limiet voor de grootte van de aanroepstapel. In de overgrote meerderheid van de gevallen zijn deze voldoende en moet het probleem ergens anders worden gezocht.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Geblokkeerde aanroepstapel<\/strong><\/h3>\n\n\n\n<p>Hier is een voorbeeld van het blokkeren van de JS thread. Laten we proberen een&nbsp;<code>foo<\/code>&nbsp;bestand en een&nbsp;<code>bar<\/code>&nbsp;met behulp van de <a href=\"https:\/\/thecodest.co\/nl\/dictionary\/what-is-node-js-used-for\/\">Knooppunt<\/a>.js synchrone functie&nbsp;<code>readFileSync<\/code>.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/app\/uploads\/2024\/05\/blocking.gif\" alt=\"JavaScript code\" title=\"JavaScript code\"\/><\/figure>\n\n\n\n<p>Dit is een geluste GIF. Zoals je ziet, wacht de JS-engine tot de eerste oproep in&nbsp;<code>readFileSync<\/code>&nbsp;is voltooid. Maar dit zal niet gebeuren omdat er geen&nbsp;<code>foo<\/code>&nbsp;bestand, dus de tweede functie zal nooit worden aangeroepen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Asynchroon gedrag<\/strong><\/h2>\n\n\n\n<p>JS kan echter ook non-blocking zijn en zich gedragen alsof het multi-threaded is. Dit betekent dat het niet wacht op het antwoord van een <a href=\"https:\/\/thecodest.co\/nl\/blog\/compare-staff-augmentation-firms-that-excel-in-api-team-staffing-for-financial-technology-projects\/\">API<\/a> oproep, I\/O-gebeurtenissen, enzovoort, en kan doorgaan met het uitvoeren van code. Dit is mogelijk dankzij de JS engines die (onder de motorkap) echte multi-threading talen gebruiken, zoals C++ (Chrome) of Rust (Firefox). Ze bieden <a href=\"https:\/\/thecodest.co\/nl\/blog\/why-us-companies-are-opting-for-polish-developers\/\">us<\/a> met de <a href=\"https:\/\/thecodest.co\/nl\/blog\/find-your-ideal-stack-for-web-development\/\">Web<\/a> API onder de browserkappen of ex. I\/O API onder Node.js.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/app\/uploads\/2024\/05\/callback-queue.gif\" alt=\"JavaScript programmeertaal\" title=\"JavaScript programmeertaal\"\/><\/figure>\n\n\n\n<p>In de bovenstaande GIF kunnen we zien dat de eerste functie naar de aanroepstapel wordt geduwd en&nbsp;<code>Hoi<\/code>&nbsp;wordt onmiddellijk uitgevoerd in de console.<\/p>\n\n\n\n<p>Vervolgens roepen we de&nbsp;<code>setTimeout<\/code>&nbsp;functie van de WebAPI van de browser. Het gaat naar de oproepstapel en zijn asynchrone callback&nbsp;<code>foo<\/code>&nbsp;functie gaat naar de wachtrij van de WebApi, waar het wacht op de oproep, die is ingesteld om na 3 seconden te gebeuren.<\/p>\n\n\n\n<p>Ondertussen gaat het programma verder met de code en zien we&nbsp;<code>Hallo. Ik ben niet geblokkeerd<\/code>&nbsp;in de console.<\/p>\n\n\n\n<p>Nadat deze is aangeroepen, gaat elke functie in de WebAPI-wachtrij naar de&nbsp;<code>Terugbel wachtrij<\/code>. Het is waar functies wachten tot de aanroepstapel leeg is. Als dat gebeurt, worden ze er \u00e9\u00e9n voor \u00e9\u00e9n naartoe verplaatst.<\/p>\n\n\n\n<p>Dus toen onze&nbsp;<code>setTimeout<\/code>&nbsp;timer klaar is met aftellen, zal onze&nbsp;<code>foo<\/code>&nbsp;functie gaat naar de callbackwachtrij, wacht tot de oproepstapel beschikbaar komt, gaat daarheen, wordt uitgevoerd en we zien&nbsp;<code>Hi van asynchrone callback<\/code>&nbsp;in de console.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Gebeurtenis lus<\/strong><\/h3>\n\n\n\n<p>De vraag is, hoe weet de runtime dat de aanroepstapel leeg is en hoe wordt de gebeurtenis in de callbackwachtrij aangeroepen? Maak kennis met de event-lus. Dit is een onderdeel van de JS-engine. Dit proces controleert voortdurend of de aanroepstapel leeg is en als dat zo is, controleert het of er een gebeurtenis in de callbackwachtrij staat die wacht om te worden aangeroepen.<\/p>\n\n\n\n<p>Dat is alle magie achter de schermen!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>De theorie samenvatten<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Concurrency en parallellisme<\/strong><\/h3>\n\n\n\n<p><code>Concurrentie<\/code>&nbsp;betekent meerdere taken tegelijkertijd uitvoeren, maar niet tegelijkertijd. Twee taken werken bijvoorbeeld in overlappende tijdsperioden.<\/p>\n\n\n\n<p><code>Parallellisme<\/code>&nbsp;betekent twee of meer taken tegelijkertijd uitvoeren, bijvoorbeeld meerdere berekeningen tegelijkertijd uitvoeren.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Draden en processen<\/strong><\/h3>\n\n\n\n<p><code>Draden<\/code>&nbsp;zijn een opeenvolging van code die onafhankelijk van elkaar kunnen worden uitgevoerd.<\/p>\n\n\n\n<p><code>Proces<\/code>&nbsp;is een instantie van een lopend programma. Een programma kan meerdere processen hebben.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Synchroon en asynchroon<\/strong><\/h3>\n\n\n\n<p>In&nbsp;<code>synchroon<\/code>&nbsp;Bij programmeren worden taken na elkaar uitgevoerd. Elke taak wacht tot een vorige taak is voltooid en wordt dan pas uitgevoerd.<\/p>\n\n\n\n<p>In&nbsp;<code>asynchroon<\/code>&nbsp;programmering, wanneer een taak is uitgevoerd, kun je overschakelen naar een andere taak zonder te wachten tot de vorige is voltooid.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Synchroon en asynchroon in een omgeving met \u00e9\u00e9n of meerdere threads<\/strong><\/h3>\n\n\n\n<p><code>Synchroon met \u00e9\u00e9n thread<\/code>: Taken worden na elkaar uitgevoerd. Elke taak wacht tot de vorige taak is uitgevoerd.<\/p>\n\n\n\n<p><code>Synchroon met meerdere threads<\/code>: Taken worden uitgevoerd in verschillende threads, maar wachten op andere uitvoerende taken op een andere thread.<\/p>\n\n\n\n<p><code>Asynchroon met \u00e9\u00e9n thread<\/code>: Taken worden uitgevoerd zonder te wachten tot een andere taak klaar is. Op een gegeven moment kan slechts \u00e9\u00e9n taak worden uitgevoerd.<\/p>\n\n\n\n<p><code>Asynchroon met meerdere threads<\/code>: Taken worden in verschillende threads uitgevoerd zonder te wachten tot andere taken klaar zijn en voltooien hun uitvoering onafhankelijk van elkaar.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>JavaScript classificatie<\/strong><\/h2>\n\n\n\n<p>Als we kijken naar hoe JS engines onder de motorkap werken, kunnen we JS classificeren als een asynchrone en single-threaded ge\u00efnterpreteerde taal. Het woord \"ge\u00efnterpreteerd\" is erg belangrijk omdat het betekent dat de taal altijd runtime-afhankelijk zal zijn en nooit zo snel als gecompileerde talen met ingebouwde multi-threading.<\/p>\n\n\n\n<p>Het is opmerkelijk dat Node.js echte multi-threading kan bereiken, op voorwaarde dat elke thread gestart wordt als een afzonderlijk proces. Hier zijn bibliotheken voor, maar Node.js heeft een ingebouwde functie genaamd&nbsp;<a href=\"https:\/\/nodejs.org\/api\/worker_threads.html#worker_threads_worker_threads\">Werkdraad<\/a>.<\/p>\n\n\n\n<p>Alle event loop GIF's komen van de&nbsp;<a href=\"https:\/\/github.com\/latentflip\/loupe\">Loep<\/a>&nbsp;applicatie gemaakt door Philip Roberts, waarin je je asynchrone scenario's kunt testen.<\/p>\n\n\n\n<p><b>Lees meer:<\/b><\/p>\n\n\n\n<p><a href=\"https:\/\/thecodest.co\/blog\/why-you-should-probably-use-typescript\">Waarom je (waarschijnlijk) Typescript zou moeten gebruiken?<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/thecodest.co\/blog\/quality-first-5-easy-steps-to-lint-your-code-with-github-workflows-in-javascript-project\/\">Kwaliteit eerst! 5 eenvoudige stappen om je code te linten met GitHub workflows in JavaScript project<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/thecodest.co\/blog\/how-to-improve-vue-js-apps-some-practical-tips\/\">Hoe kun je Vue.js-apps verbeteren? Enkele praktische tips<\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>JavaScript is een single-threaded taal en tegelijkertijd ook non-blocking, asynchroon en concurrent. Dit artikel legt je uit hoe dat in zijn werk gaat.<\/p>","protected":false},"author":2,"featured_media":3045,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[8],"tags":[],"class_list":["post-3044","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-software-development"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.3 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Asynchronous and Single-threaded JavaScript? - The Codest<\/title>\n<meta name=\"description\" content=\"JavaScript is a single-threaded language and, at the same time, also non-blocking, asynchronous and concurrent. This article will explain to you how it happens.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/thecodest.co\/nl\/blog\/asynchroon-en-single-threaded-javascript-ontmoet-de-event-loop\/\" \/>\n<meta property=\"og:locale\" content=\"nl_NL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Asynchronous and Single-threaded JavaScript?\" \/>\n<meta property=\"og:description\" content=\"JavaScript is a single-threaded language and, at the same time, also non-blocking, asynchronous and concurrent. This article will explain to you how it happens.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/thecodest.co\/nl\/blog\/asynchroon-en-single-threaded-javascript-ontmoet-de-event-loop\/\" \/>\n<meta property=\"og:site_name\" content=\"The Codest\" \/>\n<meta property=\"article:published_time\" content=\"2020-09-02T08:51:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-24T11:34:04+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/cover-image-16.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"1080\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"thecodest\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"thecodest\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/asynchronous-and-single-threaded-javascript-meet-the-event-loop\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/asynchronous-and-single-threaded-javascript-meet-the-event-loop\\\/\"},\"author\":{\"name\":\"thecodest\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/person\\\/7e3fe41dfa4f4e41a7baad4c6e0d4f76\"},\"headline\":\"Asynchronous and Single-threaded JavaScript?\",\"datePublished\":\"2020-09-02T08:51:00+00:00\",\"dateModified\":\"2026-04-24T11:34:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/asynchronous-and-single-threaded-javascript-meet-the-event-loop\\\/\"},\"wordCount\":1058,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/asynchronous-and-single-threaded-javascript-meet-the-event-loop\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/cover-image-16.jpg\",\"articleSection\":[\"Software Development\"],\"inLanguage\":\"nl-NL\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/thecodest.co\\\/blog\\\/asynchronous-and-single-threaded-javascript-meet-the-event-loop\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/asynchronous-and-single-threaded-javascript-meet-the-event-loop\\\/\",\"url\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/asynchronous-and-single-threaded-javascript-meet-the-event-loop\\\/\",\"name\":\"Asynchronous and Single-threaded JavaScript? - The Codest\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/asynchronous-and-single-threaded-javascript-meet-the-event-loop\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/asynchronous-and-single-threaded-javascript-meet-the-event-loop\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/cover-image-16.jpg\",\"datePublished\":\"2020-09-02T08:51:00+00:00\",\"dateModified\":\"2026-04-24T11:34:04+00:00\",\"description\":\"JavaScript is a single-threaded language and, at the same time, also non-blocking, asynchronous and concurrent. This article will explain to you how it happens.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/asynchronous-and-single-threaded-javascript-meet-the-event-loop\\\/#breadcrumb\"},\"inLanguage\":\"nl-NL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/thecodest.co\\\/blog\\\/asynchronous-and-single-threaded-javascript-meet-the-event-loop\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/asynchronous-and-single-threaded-javascript-meet-the-event-loop\\\/#primaryimage\",\"url\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/cover-image-16.jpg\",\"contentUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/cover-image-16.jpg\",\"width\":1920,\"height\":1080},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/asynchronous-and-single-threaded-javascript-meet-the-event-loop\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/thecodest.co\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Asynchronous and Single-threaded JavaScript?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#website\",\"url\":\"https:\\\/\\\/thecodest.co\\\/\",\"name\":\"The Codest\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/thecodest.co\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"nl-NL\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\",\"name\":\"The Codest\",\"url\":\"https:\\\/\\\/thecodest.co\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/03\\\/thecodest-logo.svg\",\"contentUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/03\\\/thecodest-logo.svg\",\"width\":144,\"height\":36,\"caption\":\"The Codest\"},\"image\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/pl.linkedin.com\\\/company\\\/codest\",\"https:\\\/\\\/clutch.co\\\/profile\\\/codest\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/person\\\/7e3fe41dfa4f4e41a7baad4c6e0d4f76\",\"name\":\"thecodest\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g\",\"caption\":\"thecodest\"},\"url\":\"https:\\\/\\\/thecodest.co\\\/nl\\\/author\\\/thecodest\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Asynchroon en \u00e9\u00e9ndraads JavaScript? - The Codest","description":"JavaScript is een single-threaded taal en tegelijkertijd ook non-blocking, asynchroon en concurrent. Dit artikel legt je uit hoe dat in zijn werk gaat.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/thecodest.co\/nl\/blog\/asynchroon-en-single-threaded-javascript-ontmoet-de-event-loop\/","og_locale":"nl_NL","og_type":"article","og_title":"Asynchronous and Single-threaded JavaScript?","og_description":"JavaScript is a single-threaded language and, at the same time, also non-blocking, asynchronous and concurrent. This article will explain to you how it happens.","og_url":"https:\/\/thecodest.co\/nl\/blog\/asynchroon-en-single-threaded-javascript-ontmoet-de-event-loop\/","og_site_name":"The Codest","article_published_time":"2020-09-02T08:51:00+00:00","article_modified_time":"2026-04-24T11:34:04+00:00","og_image":[{"width":1920,"height":1080,"url":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/cover-image-16.jpg","type":"image\/jpeg"}],"author":"thecodest","twitter_card":"summary_large_image","twitter_misc":{"Written by":"thecodest","Est. reading time":"6 minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/thecodest.co\/blog\/asynchronous-and-single-threaded-javascript-meet-the-event-loop\/#article","isPartOf":{"@id":"https:\/\/thecodest.co\/blog\/asynchronous-and-single-threaded-javascript-meet-the-event-loop\/"},"author":{"name":"thecodest","@id":"https:\/\/thecodest.co\/#\/schema\/person\/7e3fe41dfa4f4e41a7baad4c6e0d4f76"},"headline":"Asynchronous and Single-threaded JavaScript?","datePublished":"2020-09-02T08:51:00+00:00","dateModified":"2026-04-24T11:34:04+00:00","mainEntityOfPage":{"@id":"https:\/\/thecodest.co\/blog\/asynchronous-and-single-threaded-javascript-meet-the-event-loop\/"},"wordCount":1058,"commentCount":0,"publisher":{"@id":"https:\/\/thecodest.co\/#organization"},"image":{"@id":"https:\/\/thecodest.co\/blog\/asynchronous-and-single-threaded-javascript-meet-the-event-loop\/#primaryimage"},"thumbnailUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/cover-image-16.jpg","articleSection":["Software Development"],"inLanguage":"nl-NL","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/thecodest.co\/blog\/asynchronous-and-single-threaded-javascript-meet-the-event-loop\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/thecodest.co\/blog\/asynchronous-and-single-threaded-javascript-meet-the-event-loop\/","url":"https:\/\/thecodest.co\/blog\/asynchronous-and-single-threaded-javascript-meet-the-event-loop\/","name":"Asynchroon en \u00e9\u00e9ndraads JavaScript? - The Codest","isPartOf":{"@id":"https:\/\/thecodest.co\/#website"},"primaryImageOfPage":{"@id":"https:\/\/thecodest.co\/blog\/asynchronous-and-single-threaded-javascript-meet-the-event-loop\/#primaryimage"},"image":{"@id":"https:\/\/thecodest.co\/blog\/asynchronous-and-single-threaded-javascript-meet-the-event-loop\/#primaryimage"},"thumbnailUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/cover-image-16.jpg","datePublished":"2020-09-02T08:51:00+00:00","dateModified":"2026-04-24T11:34:04+00:00","description":"JavaScript is een single-threaded taal en tegelijkertijd ook non-blocking, asynchroon en concurrent. Dit artikel legt je uit hoe dat in zijn werk gaat.","breadcrumb":{"@id":"https:\/\/thecodest.co\/blog\/asynchronous-and-single-threaded-javascript-meet-the-event-loop\/#breadcrumb"},"inLanguage":"nl-NL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thecodest.co\/blog\/asynchronous-and-single-threaded-javascript-meet-the-event-loop\/"]}]},{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/thecodest.co\/blog\/asynchronous-and-single-threaded-javascript-meet-the-event-loop\/#primaryimage","url":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/cover-image-16.jpg","contentUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/cover-image-16.jpg","width":1920,"height":1080},{"@type":"BreadcrumbList","@id":"https:\/\/thecodest.co\/blog\/asynchronous-and-single-threaded-javascript-meet-the-event-loop\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/thecodest.co\/"},{"@type":"ListItem","position":2,"name":"Asynchronous and Single-threaded JavaScript?"}]},{"@type":"WebSite","@id":"https:\/\/thecodest.co\/#website","url":"https:\/\/thecodest.co\/","name":"The Codest","description":"","publisher":{"@id":"https:\/\/thecodest.co\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/thecodest.co\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"nl-NL"},{"@type":"Organization","@id":"https:\/\/thecodest.co\/#organization","name":"The Codest","url":"https:\/\/thecodest.co\/","logo":{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/thecodest.co\/#\/schema\/logo\/image\/","url":"https:\/\/thecodest.co\/app\/uploads\/2024\/03\/thecodest-logo.svg","contentUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/03\/thecodest-logo.svg","width":144,"height":36,"caption":"The Codest"},"image":{"@id":"https:\/\/thecodest.co\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/pl.linkedin.com\/company\/codest","https:\/\/clutch.co\/profile\/codest"]},{"@type":"Person","@id":"https:\/\/thecodest.co\/#\/schema\/person\/7e3fe41dfa4f4e41a7baad4c6e0d4f76","name":"thecodest","image":{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/secure.gravatar.com\/avatar\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g","caption":"thecodest"},"url":"https:\/\/thecodest.co\/nl\/author\/thecodest\/"}]}},"_links":{"self":[{"href":"https:\/\/thecodest.co\/nl\/wp-json\/wp\/v2\/posts\/3044","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thecodest.co\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thecodest.co\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thecodest.co\/nl\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/thecodest.co\/nl\/wp-json\/wp\/v2\/comments?post=3044"}],"version-history":[{"count":6,"href":"https:\/\/thecodest.co\/nl\/wp-json\/wp\/v2\/posts\/3044\/revisions"}],"predecessor-version":[{"id":7721,"href":"https:\/\/thecodest.co\/nl\/wp-json\/wp\/v2\/posts\/3044\/revisions\/7721"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thecodest.co\/nl\/wp-json\/wp\/v2\/media\/3045"}],"wp:attachment":[{"href":"https:\/\/thecodest.co\/nl\/wp-json\/wp\/v2\/media?parent=3044"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thecodest.co\/nl\/wp-json\/wp\/v2\/categories?post=3044"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thecodest.co\/nl\/wp-json\/wp\/v2\/tags?post=3044"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}