{"id":530538,"date":"2018-07-11T21:34:00","date_gmt":"2018-07-11T21:34:00","guid":{"rendered":"https:\/\/www.capgemini.com\/ca-en\/?p=530538"},"modified":"2026-02-26T05:55:44","modified_gmt":"2026-02-26T10:55:44","slug":"cleaning-up-asynchronous-javascript-with-async-await-keywords","status":"archive","type":"post","link":"https:\/\/www.capgemini.com\/ca-en\/insights\/expert-perspectives\/cleaning-up-asynchronous-javascript-with-async-await-keywords\/","title":{"rendered":"Cleaning up asynchronous JavaScript with async\/await keywords"},"content":{"rendered":"\n<header class=\"wp-block-cg-blocks-hero-blogs header-hero-blogs\"><div class=\"container\"><div class=\"hero-blogs\"><div class=\"hero-blogs-content-wrapper\"><div class=\"row\"><div class=\"col-12\"><div class=\"header-title\"><h1>Cleaning up asynchronous JavaScript with async\/await keywords<\/h1><\/div><\/div><\/div><\/div><div class=\"hero-blogs-bottom\"><div class=\"header-author\"><div class=\"author-img\"><img decoding=\"async\" src=\"https:\/\/www.capgemini.com\/ca-en\/wp-content\/uploads\/sites\/17\/2021\/06\/cg-logo.png?w=601?w=200&amp;quality=10\" alt=\"\" loading=\"lazy\"\/><\/div><div class=\"author-name-date\"><h5 class=\"author-name\">Capgemini<\/h5><h5 class=\"blog-date\">2018-07-11<\/h5><\/div><\/div><div class=\"brand-image\"> <\/div><\/div><\/div><\/div><\/header>\n\n\n\n<section class=\"wp-block-cg-blocks-group undefined section section--article-content\"><div class=\"article-main-content\"><div class=\"container\"><div class=\"row\"><div class=\"col-12 col-md-11 col-lg-10 offset-md-1 offset-lg-1\"><div class=\"article-text article-quote-text\">\n<h5 class=\"wp-block-heading\" id=\"h-asynchronous-javascript\"><strong>Asynchronous JavaScript<\/strong><\/h5>\n\n\n\n<p>Software applications often work synchronously in that they start a task and then must wait for it to finish before starting a new task. While that is the only choice for some types of processing, an alternative using asynchronous processing can be a better solution as it allows the application to perform multiple tasks simultaneously. In asynchronous algorithms, multiple tasks can be started but eventually, processing can only continue when all of them have completed. This speeds up application performance but does require coordination to ensure that all started tasks have completed before the application is allowed to continue with the processing of the results. Consider this Node.js application:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/www.capgemini.com\/ca-en\/wp-content\/uploads\/sites\/4\/2019\/07\/async1.png\" alt=\"\" class=\"wp-image-100951\"\/><\/figure>\n\n\n\n<p>This example uses the&nbsp;<a href=\"https:\/\/www.npmjs.com\/package\/fs-extra\">fs-extra<\/a>&nbsp;node module to look for a directory, create one if it doesn\u2019t exist, empty that directory if there are any files in it, create a newfile.txt, and then read that file.<\/p>\n\n\n\n<p>When running this code, the console should print:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Created\/Checked for Directory<\/li>\n\n\n\n<li>Emptied Data<\/li>\n\n\n\n<li>File Created<\/li>\n\n\n\n<li>File Contents: Hello World how are you??<\/li>\n<\/ul>\n\n\n\n<p>Anyone who has encountered asynchronous code, though, will know that this is not the case. Here is an example of what is logged:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Created\/Checked for Directory<\/li>\n\n\n\n<li>Emptied Data<\/li>\n\n\n\n<li>{ Error: ENOENT: no such file or directory, open \u2018.\/data\/newfile.txt\u2019<\/li>\n\n\n\n<li>&nbsp;errno: -2,<\/li>\n\n\n\n<li>&nbsp;code: \u2018ENOENT\u2019,<\/li>\n\n\n\n<li>&nbsp;syscall: \u2018open\u2019,<\/li>\n\n\n\n<li>&nbsp;path: \u2018.\/data\/newfile.txt\u2019 }<\/li>\n\n\n\n<li>File Created<\/li>\n<\/ul>\n\n\n\n<p>The code above is attempting to read the newfile.txt before the outputFile method has finished creating it.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"h-enter-the-promise\"><strong>Enter the Promise<\/strong><\/h5>\n\n\n\n<p>In JavaScript, a Promise is a solution to the asynchronous problem discussed above and allows the application to coordinate it\u2019s processing as each asynchronous task completes. A Promise represents the future state of an asynchronous process once it has completed. The Microsoft Developer\u2019s Network has an in-depth definition&nbsp;<a href=\"https:\/\/developer.mozilla.org\/fr\/docs\/Web\/JavaScript\/Reference\/Objets_globaux\/Promise\/resolve\">here<\/a>.<\/p>\n\n\n\n<p>In the following example, Promises are used to make sure each asynchronous step in creating the file is completed before the next one begins.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/www.capgemini.com\/ca-en\/wp-content\/uploads\/sites\/4\/2019\/07\/async2.png\" alt=\"\" class=\"wp-image-100952\"\/><\/figure>\n\n\n\n<p>The code above produces this output:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Created\/Checked for Directory<\/li>\n\n\n\n<li>Emptied Data<\/li>\n\n\n\n<li>File Created<\/li>\n\n\n\n<li>File Contents: &nbsp;Hello World how are you??<\/li>\n<\/ul>\n\n\n\n<p>Mission accomplished! Our asynchronous code now fires and completes as intended. Unfortunately, the code is a little messy and difficult to read because of the conditional logic (.then statements in the chain of promises) required to coordinate between each of the steps. Fortunately, there is another JavaScript construct we can use which provides the same functionality but in code that is much cleaner, easier to understand, and more maintainable for any future changes.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"h-the-solution-async-await\"><strong>The Solution: Async\/Await<\/strong><\/h5>\n\n\n\n<p>To clean up the promise chain above, you can use the Async and Await keywords. A function declared with the \u2018async\u2019 keyword indicates that the function will be handling asynchronous operations. The declaration would look like this:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>async function foo() {<\/li>\n\n\n\n<li>\/\/asynchronous code here<\/li>\n\n\n\n<li>}<\/li>\n<\/ul>\n\n\n\n<p>The await keyword tells JavaScript to wait for a Promise to complete before continuing processing and is applicable only when nested inside a function declared with the \u2018async\u2019 keyword. See this example:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Async function foo() {<\/li>\n\n\n\n<li>await promise;<\/li>\n\n\n\n<li>}<\/li>\n<\/ul>\n\n\n\n<p>Here is our code using async and await:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/www.capgemini.com\/ca-en\/wp-content\/uploads\/sites\/4\/2019\/07\/async3.png\" alt=\"\" class=\"wp-image-100953\"\/><\/figure>\n\n\n\n<p>Much cleaner! This implements exactly the same functions as the example above while using 30 fewer lines of code. In addition, readability and maintainability are enhanced by eliminating the nested chain of promises.<\/p>\n\n\n\n<p>Also, notice that we can still chain .then after an await to have code fire directly following the resolution of a promise. So, if you find yourself with asynchronous JavaScript and you need to use a promise, consider using async\/await to produce cleaner and easier asynchronous code.<\/p>\n<\/div><\/div><\/div><\/div><\/div><\/section>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":103,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"cg_dt_proposed_to":[],"cg_seo_hreflang_relations":"[]","cg_seo_canonical_relation":"","cg_seo_hreflang_x_default_relation":"{\"uuid\":\"9d0ba5e5-5ef8-4a8b-a75b-b424179bd6e2\",\"blogId\":\"\",\"domain\":\"\",\"sitePath\":\"\",\"postLink\":\"\",\"postId\":null,\"isSaved\":true,\"isCrossLink\":false,\"hasCrossLink\":false}","cg_dt_approved_content":true,"cg_dt_mandatory_content":false,"cg_dt_notes":"","cg_dg_source_changed":false,"cg_dt_link_disabled":false,"_yoast_wpseo_primary_brand":"","_jetpack_memberships_contains_paid_content":false,"footnotes":"","featured_focal_points":""},"categories":[1],"tags":[],"brand":[],"service":[],"industry":[],"partners":[],"blog-topic":[],"content-group":[],"class_list":["post-530538","post","type-post","status-archive","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v22.8 (Yoast SEO v22.8) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Cleaning up asynchronous JavaScript with async\/await keywords - Capgemini Canada - English<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.capgemini.com\/ca-en\/insights\/expert-perspectives\/cleaning-up-asynchronous-javascript-with-async-await-keywords\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Cleaning up asynchronous JavaScript with async\/await keywords\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.capgemini.com\/ca-en\/insights\/expert-perspectives\/cleaning-up-asynchronous-javascript-with-async-await-keywords\/\" \/>\n<meta property=\"og:site_name\" content=\"Capgemini Canada - English\" \/>\n<meta property=\"article:published_time\" content=\"2018-07-11T21:34:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-02-26T10:55:44+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.capgemini.com\/ca-en\/wp-content\/uploads\/sites\/17\/2021\/06\/cg-logo.png?w=601?w=200&amp;quality=10\" \/>\n<meta name=\"author\" content=\"Capgemini\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Sai Kiran\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.capgemini.com\/ca-en\/insights\/expert-perspectives\/cleaning-up-asynchronous-javascript-with-async-await-keywords\/\",\"url\":\"https:\/\/www.capgemini.com\/ca-en\/insights\/expert-perspectives\/cleaning-up-asynchronous-javascript-with-async-await-keywords\/\",\"name\":\"Cleaning up asynchronous JavaScript with async\/await keywords - Capgemini Canada - English\",\"isPartOf\":{\"@id\":\"https:\/\/www.capgemini.com\/ca-en\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.capgemini.com\/ca-en\/insights\/expert-perspectives\/cleaning-up-asynchronous-javascript-with-async-await-keywords\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.capgemini.com\/ca-en\/insights\/expert-perspectives\/cleaning-up-asynchronous-javascript-with-async-await-keywords\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.capgemini.com\/ca-en\/wp-content\/uploads\/sites\/17\/2021\/06\/cg-logo.png?w=601?w=200&amp;quality=10\",\"datePublished\":\"2018-07-11T21:34:00+00:00\",\"dateModified\":\"2026-02-26T10:55:44+00:00\",\"author\":{\"@id\":\"https:\/\/www.capgemini.com\/ca-en\/#\/schema\/person\/e18c469582cc4e2dd2649041406912d2\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.capgemini.com\/ca-en\/insights\/expert-perspectives\/cleaning-up-asynchronous-javascript-with-async-await-keywords\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.capgemini.com\/ca-en\/insights\/expert-perspectives\/cleaning-up-asynchronous-javascript-with-async-await-keywords\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.capgemini.com\/ca-en\/insights\/expert-perspectives\/cleaning-up-asynchronous-javascript-with-async-await-keywords\/#primaryimage\",\"url\":\"https:\/\/www.capgemini.com\/ca-en\/wp-content\/uploads\/sites\/17\/2021\/06\/cg-logo.png\",\"contentUrl\":\"https:\/\/www.capgemini.com\/ca-en\/wp-content\/uploads\/sites\/17\/2021\/06\/cg-logo.png\",\"width\":601,\"height\":559},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.capgemini.com\/ca-en\/insights\/expert-perspectives\/cleaning-up-asynchronous-javascript-with-async-await-keywords\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.capgemini.com\/ca-en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Cleaning up asynchronous JavaScript with async\/await keywords\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.capgemini.com\/ca-en\/#website\",\"url\":\"https:\/\/www.capgemini.com\/ca-en\/\",\"name\":\"Capgemini Canada - English\",\"description\":\"Capgemini Canada - English\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.capgemini.com\/ca-en\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.capgemini.com\/ca-en\/#\/schema\/person\/e18c469582cc4e2dd2649041406912d2\",\"name\":\"Sai Kiran\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.capgemini.com\/ca-en\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/69af7cac9382dfaba3d29d59519ab6ed7d89c43435e1f21d522b830e56b0fd26?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/69af7cac9382dfaba3d29d59519ab6ed7d89c43435e1f21d522b830e56b0fd26?s=96&d=mm&r=g\",\"caption\":\"Sai Kiran\"},\"url\":\"https:\/\/www.capgemini.com\/ca-en\/author\/saikiranb\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Cleaning up asynchronous JavaScript with async\/await keywords - Capgemini Canada - English","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:\/\/www.capgemini.com\/ca-en\/insights\/expert-perspectives\/cleaning-up-asynchronous-javascript-with-async-await-keywords\/","og_locale":"en_US","og_type":"article","og_title":"Cleaning up asynchronous JavaScript with async\/await keywords","og_url":"https:\/\/www.capgemini.com\/ca-en\/insights\/expert-perspectives\/cleaning-up-asynchronous-javascript-with-async-await-keywords\/","og_site_name":"Capgemini Canada - English","article_published_time":"2018-07-11T21:34:00+00:00","article_modified_time":"2026-02-26T10:55:44+00:00","og_image":[{"url":"https:\/\/www.capgemini.com\/ca-en\/wp-content\/uploads\/sites\/17\/2021\/06\/cg-logo.png?w=601?w=200&amp;quality=10"}],"author":"Capgemini","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Sai Kiran","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.capgemini.com\/ca-en\/insights\/expert-perspectives\/cleaning-up-asynchronous-javascript-with-async-await-keywords\/","url":"https:\/\/www.capgemini.com\/ca-en\/insights\/expert-perspectives\/cleaning-up-asynchronous-javascript-with-async-await-keywords\/","name":"Cleaning up asynchronous JavaScript with async\/await keywords - Capgemini Canada - English","isPartOf":{"@id":"https:\/\/www.capgemini.com\/ca-en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.capgemini.com\/ca-en\/insights\/expert-perspectives\/cleaning-up-asynchronous-javascript-with-async-await-keywords\/#primaryimage"},"image":{"@id":"https:\/\/www.capgemini.com\/ca-en\/insights\/expert-perspectives\/cleaning-up-asynchronous-javascript-with-async-await-keywords\/#primaryimage"},"thumbnailUrl":"https:\/\/www.capgemini.com\/ca-en\/wp-content\/uploads\/sites\/17\/2021\/06\/cg-logo.png?w=601?w=200&amp;quality=10","datePublished":"2018-07-11T21:34:00+00:00","dateModified":"2026-02-26T10:55:44+00:00","author":{"@id":"https:\/\/www.capgemini.com\/ca-en\/#\/schema\/person\/e18c469582cc4e2dd2649041406912d2"},"breadcrumb":{"@id":"https:\/\/www.capgemini.com\/ca-en\/insights\/expert-perspectives\/cleaning-up-asynchronous-javascript-with-async-await-keywords\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.capgemini.com\/ca-en\/insights\/expert-perspectives\/cleaning-up-asynchronous-javascript-with-async-await-keywords\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.capgemini.com\/ca-en\/insights\/expert-perspectives\/cleaning-up-asynchronous-javascript-with-async-await-keywords\/#primaryimage","url":"https:\/\/www.capgemini.com\/ca-en\/wp-content\/uploads\/sites\/17\/2021\/06\/cg-logo.png","contentUrl":"https:\/\/www.capgemini.com\/ca-en\/wp-content\/uploads\/sites\/17\/2021\/06\/cg-logo.png","width":601,"height":559},{"@type":"BreadcrumbList","@id":"https:\/\/www.capgemini.com\/ca-en\/insights\/expert-perspectives\/cleaning-up-asynchronous-javascript-with-async-await-keywords\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.capgemini.com\/ca-en\/"},{"@type":"ListItem","position":2,"name":"Cleaning up asynchronous JavaScript with async\/await keywords"}]},{"@type":"WebSite","@id":"https:\/\/www.capgemini.com\/ca-en\/#website","url":"https:\/\/www.capgemini.com\/ca-en\/","name":"Capgemini Canada - English","description":"Capgemini Canada - English","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.capgemini.com\/ca-en\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.capgemini.com\/ca-en\/#\/schema\/person\/e18c469582cc4e2dd2649041406912d2","name":"Sai Kiran","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.capgemini.com\/ca-en\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/69af7cac9382dfaba3d29d59519ab6ed7d89c43435e1f21d522b830e56b0fd26?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/69af7cac9382dfaba3d29d59519ab6ed7d89c43435e1f21d522b830e56b0fd26?s=96&d=mm&r=g","caption":"Sai Kiran"},"url":"https:\/\/www.capgemini.com\/ca-en\/author\/saikiranb\/"}]}},"blog_topic_info":[],"taxonomy_info":{"category":[{"id":1,"name":"Uncategorized","slug":"uncategorized"}]},"parsely":{"version":"1.1.0","canonical_url":"https:\/\/capgemini.com\/ca-en\/insights\/expert-perspectives\/cleaning-up-asynchronous-javascript-with-async-await-keywords\/","smart_links":{"inbound":0,"outbound":0},"traffic_boost_suggestions_count":0,"meta":[],"rendered":"","tracker_url":"https:\/\/cdn.parsely.com\/keys\/capgemini.com\/p.js"},"jetpack_featured_media_url":"","archive_status":true,"featured_image_src":"https:\/\/www.capgemini.com\/ca-en\/wp-content\/themes\/capgemini2025\/assets\/images\/mockup.png","featured_image_alt":false,"jetpack_sharing_enabled":true,"distributor_meta":false,"distributor_terms":false,"distributor_media":false,"distributor_original_site_name":"Capgemini Canada - English","distributor_original_site_url":"https:\/\/www.capgemini.com\/ca-en","push-errors":false,"_links":{"self":[{"href":"https:\/\/www.capgemini.com\/ca-en\/wp-json\/wp\/v2\/posts\/530538","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.capgemini.com\/ca-en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.capgemini.com\/ca-en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.capgemini.com\/ca-en\/wp-json\/wp\/v2\/users\/103"}],"replies":[{"embeddable":true,"href":"https:\/\/www.capgemini.com\/ca-en\/wp-json\/wp\/v2\/comments?post=530538"}],"version-history":[{"count":4,"href":"https:\/\/www.capgemini.com\/ca-en\/wp-json\/wp\/v2\/posts\/530538\/revisions"}],"predecessor-version":[{"id":678953,"href":"https:\/\/www.capgemini.com\/ca-en\/wp-json\/wp\/v2\/posts\/530538\/revisions\/678953"}],"wp:attachment":[{"href":"https:\/\/www.capgemini.com\/ca-en\/wp-json\/wp\/v2\/media?parent=530538"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.capgemini.com\/ca-en\/wp-json\/wp\/v2\/categories?post=530538"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.capgemini.com\/ca-en\/wp-json\/wp\/v2\/tags?post=530538"},{"taxonomy":"brand","embeddable":true,"href":"https:\/\/www.capgemini.com\/ca-en\/wp-json\/wp\/v2\/brand?post=530538"},{"taxonomy":"service","embeddable":true,"href":"https:\/\/www.capgemini.com\/ca-en\/wp-json\/wp\/v2\/service?post=530538"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/www.capgemini.com\/ca-en\/wp-json\/wp\/v2\/industry?post=530538"},{"taxonomy":"partners","embeddable":true,"href":"https:\/\/www.capgemini.com\/ca-en\/wp-json\/wp\/v2\/partners?post=530538"},{"taxonomy":"blog-topic","embeddable":true,"href":"https:\/\/www.capgemini.com\/ca-en\/wp-json\/wp\/v2\/blog-topic?post=530538"},{"taxonomy":"content-group","embeddable":true,"href":"https:\/\/www.capgemini.com\/ca-en\/wp-json\/wp\/v2\/content-group?post=530538"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]},"featured_image_url":"https:\/\/www.capgemini.com\/ca-en\/wp-content\/themes\/capgemini2025\/assets\/images\/mockup.png","author_title":"Capgemini","author_thumbnail_url":"https:\/\/www.capgemini.com\/ca-en\/wp-content\/uploads\/sites\/17\/2021\/06\/cg-logo.png?w=601","author_thumbnail_alt":""}