{"id":34273,"date":"2019-10-31T21:57:22","date_gmt":"2019-10-31T18:57:22","guid":{"rendered":"https:\/\/prohoster.info\/blog\/asinhronnoe-programmirovanie-polnyj-kurs\/"},"modified":"2019-10-31T21:57:22","modified_gmt":"2019-10-31T18:57:22","slug":"asinhronnoe-programmirovanie-polnyj-kurs","status":"publish","type":"post","link":"https:\/\/prohoster.info\/da\/blog\/news\/asinhronnoe-programmirovanie-polnyj-kurs","title":{"rendered":"Asynkront programmering (komplett kursus)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/playlist?list=PLHhi8ymDMrQZ0MpTsmi54OkjTbo0cjU1T\"><img decoding=\"async\" alt=\"Asynkront programmering (komplett kursus)\" src=\"\/wp-content\/uploads\/2019\/05\/05e2e5ca44a35d173d006faafd6d18c0.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p><\/p>\n<p>Asynkron programmering er p\u00e5 det seneste blevet en lige s\u00e5 udviklet retning som klassisk parallel programmering, og i JavaScript-verdenen, b\u00e5de i browsere og i Node.js, har forst\u00e5elsen af dens teknikker taget en central rolle i udvikleres verdenssyn. Jeg pr\u00e6senterer for dig et sammenh\u00e6ngende og mest fuldst\u00e6ndige kursus med forklaring af alle udbredte metoder til asynkron programmering, adaptere mellem dem og hj\u00e6lpeskaber. Det best\u00e5r nu af 23 forel\u00e6sninger, 3 pr\u00e6sentationer og 28 repositories med mange kodeeksempler p\u00e5 GitHub. Samlet set omkring 17 timers video: <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/playlist?list=PLHhi8ymDMrQZ0MpTsmi54OkjTbo0cjU1T\">link til playliste<\/a><\/noindex>.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h4 id=\"poyasneniya-k-sheme\">Forklaringer til diagrammet<\/h4>\n<p><\/p>\n<p>I diagrammet (ovenfor) vises forbindelserne mellem forskellige m\u00e5der at arbejde med asynkronitet. De farvede blokke relaterer til asynkron programmering, mens sort\/hvide viser metoder til parallel programmering (semaforer, mutexer, barrierer osv.) og Petri-net, som ligesom asynkron programmering og akt\u00f8rmodellen er forskellige tilgange til implementering af parallelle beregninger (de er givet i diagrammet kun for pr\u00e6cist at definere pladsen for asynkron programmering). Akt\u00f8rmodellen er relateret til asynkron programmering, fordi implementeringen af akt\u00f8rer uden multitr\u00e5dning ogs\u00e5 har ret til at eksistere og tjener til struktureret asynkron kode. Punktlinjerne forbinder begivenheder og den konkurrerende k\u00f8 med callbacks, fordi disse abstraktioner er baseret p\u00e5 callbacks, men alligevel danner de kvalitativt nye tilgange.<\/p>\n<p><\/p>\n<h4 id=\"temy-lekciy\">Emner for forel\u00e6sninger<\/h4>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/hY6Z6qNYzmc\">1. Asynkron programmering (overblik)<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/LK2jveAnRNg\">2. Timere, timeouts og EventEmitter<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/z8Hg6zgi3yQ\">3. Asynkron programmering med callbacks<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/wYA2cIRYLoA\">4. Ikke-blokerende asynkron iteration<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/XQ94wQc-erU\">5. \u0410\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0441\u0442\u044c \u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 async.js<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/RMl4r6s1Y8M\">6. Asynkronitet med promises<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/Jdf_tZuJbHI\">7. Asynkrone funktioner og fejlbehandling<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/76k6_YkYRmU\">8. Asynkrone adaptorer: promisify, callbackify, asyncify<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/tgodt1JL6II\">9. Asynkrone datakollektorer<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/1Ml5NE2fsZ8\">10. Ubehandlede fejl i promises<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/pfiHTx3j87Y\">11. Problemet med den asynkrone staktrace<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/kvNm9D32s8s\">12. Generatorer og asynkrone generatorer<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/rBGFlWpVpGs\">13. Iterat\u00f8rer og asynkrone iterat\u00f8rer<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/T8fXlnqI4Ws\">14. Annullering af asynkrone operationer<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/3ZCrMlMpOrM\">15. Asynkron sammens\u00e6tning af funktioner<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/DXp__1VNIvI\">16. Thenable og letv\u00e6gts await<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/Lg46AH8wFvg\">17. Konkurrerende asynkron k\u00f8<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/leR5sXRkuJI\">18. M\u00f8nster for \u00e5ben konstrukt\u00f8r (Revealing Constructor)<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/22ONv3AGXdk\">19. Future: Asynkronitet p\u00e5 futures uden tilstand<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/a2fVA1o-ovM\">20. Deferred: Asynkronitet p\u00e5 deferreds med tilstand<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/xp5MVKEqxY4\">21. Akt\u00f8rmodel (Actor Model)<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/_bFXuLcXoXg\">22. Observer-m\u00f8nsteret (Observer + Observable)<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/0kcpMAl-wfE\">23. Asynkronitet med RxJS og h\u00e6ndelsesstr\u00f8mme<\/a><\/noindex><\/p>\n<p><\/p>\n<p>Under hver video er der links til repositories med eksempler p\u00e5 kode, som gennemg\u00e5s i videoen. Jeg har bestr\u00e6bt mig p\u00e5 at vise, at man ikke skal reducere alting til \u00e9n abstraktion af asynkronitet. Der findes ikke en universel tilgang til asynkronitet, og for hver enkelt sag kan man finde de metoder, der g\u00f8r det lettere at skrive kode, der er mere naturlig for den p\u00e5g\u00e6ldende opgave. Selvf\u00f8lgelig vil dette kursus blive suppleret, og jeg opfordrer alle til at foresl\u00e5 nye emner og bidrage med eksempler p\u00e5 kode. Kursusets prim\u00e6re m\u00e5l er at vise, hvordan man bygger abstraktioner af asynkronitet indefra, i stedet for blot at l\u00e6re at bruge dem. Praktisk talt alle abstraktioner er ikke taget fra biblioteker, men givet i deres simpelste implementering, og deres arbejde er gennemg\u00e5et trin for trin.<\/p>\n<p class=\"for_users_only_msg\">Kun registrerede brugere kan deltage i unders\u00f8gelsen. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Log ind<\/a><\/noindex>, please.<\/p>\n<h2 class=\"default-block__polling-title\">Hvad mener du om kurset?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Jeg vil se hele kurset<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Jeg vil se udvalgte dele<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Jeg har nok med \u00e9n tilgang<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Jeg vil bidrage til kurset<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Jeg er ikke interesseret i asynkronitet<\/p>\n<\/li>\n<\/ul>\n<p>    8 brugere har stemt. 1 bruger har undladt at stemme.<br \/>\n<br \/>Kilde: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/452974\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0410\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0441\u0442\u0430\u043b\u043e \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0440\u0430\u0437\u0432\u0438\u0442\u044b\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c, \u0447\u0435\u043c \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0430 \u0432 \u043c\u0438\u0440\u0435 JavaSript, \u043a\u0430\u043a \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u0445, \u0442\u0430\u043a \u0438 \u0432 Node.js, \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0435\u0433\u043e \u043f\u0440\u0438\u0435\u043c\u043e\u0432 \u0437\u0430\u043d\u044f\u043b\u043e \u043e\u0434\u043d\u043e \u0438\u0437 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0435\u0441\u0442 \u0432 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043c\u0438\u0440\u043e\u0432\u043e\u0437\u0437\u0440\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432. \u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0432\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u044b\u0439 \u0438 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u0443\u0440\u0441 \u0441 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435\u043c \u0432\u0441\u0435\u0445 \u0448\u0438\u0440\u043e\u043a\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u043e\u0432 \u043c\u0435\u0436\u0434\u0443 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":25850,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-34273","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/da\/blog\/news\/asinhronnoe-programmirovanie-polnyj-kurs\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0410\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 (\u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u0443\u0440\u0441) | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/da\/blog\/news\/asinhronnoe-programmirovanie-polnyj-kurs\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:57:22+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:57:22+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Asynkront programmering (komplet kursus) | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/da\/blog\/news\/asinhronnoe-programmirovanie-polnyj-kurs","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0410\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 (\u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u0443\u0440\u0441) | ProHoster","og:url":"https:\/\/prohoster.info\/da\/blog\/news\/asinhronnoe-programmirovanie-polnyj-kurs","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:57:22+00:00","article:modified_time":"2019-10-31T18:57:22+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"34273","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 18:33:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:25:30","updated":"2026-01-21 18:33:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/34273","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=34273"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/34273\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/25850"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=34273"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=34273"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=34273"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}