{"id":107,"date":"2026-03-12T17:26:58","date_gmt":"2026-03-12T17:26:58","guid":{"rendered":"http:\/\/certsimple.com\/certsimplefast-painless-ev-https-29\/"},"modified":"2026-03-12T17:26:58","modified_gmt":"2026-03-12T17:26:58","slug":"certsimplefast-painless-ev-https-29","status":"publish","type":"page","link":"https:\/\/certsimple.com\/blog\/javascript-equals-async-await","title":{"rendered":"CertSimple\n\t\t\t\tFast painless EV HTTPS"},"content":{"rendered":"<p><a class=\"mobile-logo\" href=\"https:\/\/certsimple.com\"><\/p>\n<h1>\n\t\t\t\t<amp-img layout=\"fixed\" alt=\"an image\" src=\"https:\/\/certsimple.com\/images\/blog\/logo-blue.svg\" width=\"26\" height=\"26\"><\/amp-img>CertSimple<br \/>\n\t\t\t\t<small>Fast painless EV HTTPS<\/small><br \/>\n\t\t\t<\/h1>\n<p>\t\t<\/a><\/p>\n<nav class=\"persistent\">\n\t\t\t<a class=\"logo\" href=\"https:\/\/certsimple.com\"><\/p>\n<h1>\n\t\t\t\t\t<amp-img layout=\"fixed\" alt=\"an image\" src=\"https:\/\/certsimple.com\/images\/blog\/logo-blue.svg\" width=\"26\" height=\"26\"><\/amp-img>CertSimple<br \/>\n\t\t\t\t\t<small>Fast painless EV HTTPS<\/small><br \/>\n\t\t\t\t<\/h1>\n<p>\t\t\t<\/a><br \/>\n\t\t\t<a href=\"https:\/\/certsimple.com\">Get a certificate<\/a><br \/>\n\t\t\t<a href=\"https:\/\/certsimple.com\/help\" class=\"\">Help &#038; FAQ<\/a><br \/>\n\t\t\t<a href=\"https:\/\/certsimple.com\/blog\" class=\"active\">Blog<\/a><br \/>\n\t\t\t<a href=\"https:\/\/certsimple.com\/about\" class=\"\">Why CertSimple<\/a><br \/>\n\t\t\t<a href=\"https:\/\/certsimple.com\/why-ev-ssl\" class=\"\">Why EV HTTPS<\/a><br \/>\n\t\t\t<a class=\"twitter\" target=\"_blank\" href=\"https:\/\/twitter.com\/certsimple\"><br \/>\n\t\t\t\t<amp-img layout=\"fixed\" alt=\"an image\" src=\"https:\/\/certsimple.com\/images\/twitter.svg\" width=\"20\" height=\"20\"><\/amp-img><br \/>\n\t\t\t<\/a><br \/>\n\t\t\t<a class=\"log-in\" href=\"https:\/\/certsimple.com\/orders\">Log in <span class=\"symbol\">&#x1F862;<\/span><\/a><br \/>\n\t\t<\/nav>\n<div class=\"blog-title javascript-equals-async-await\">\n<header>\n<h2>ES2017&apos;s async\/await is the best thing to ever happen to JavaScript<\/h2>\n<h3>No callbacks, no .then()<\/h3>\n<p>\t\t<amp-img layout=\"fixed\" alt=\"an image\" class=\"avatar\" src=\"https:\/\/certsimple.com\/images\/blog\/mike.jpg\" width=\"48\" height=\"48\"><\/amp-img><\/p>\n<p class=\"date\">By Mike on 20th Jun 2017<\/p>\n<\/header>\n<\/div>\n<div class=\"blog\">\n<p class=\"35abpmkrc7reoxkzb\"><strong>Edit:<\/strong>: Part 2 of this article &#8211; <a href=\"https:\/\/certsimple.com\/blog\/flattening-javascript-async-await\">How to flatten an existing JavaScript codebase<\/a> &#8211; now up up!<\/p>\n<p class=\"35abpmkrc7reoxkzb\">I started doing JavaScript sometime around 2011. I was server\/Python person, and node 0.4 had a lot of cool things: DOM manipulation on the server, HTTP as a first class citizen, and the ability to get a million people to connect to your server at once without it being a big deal.<\/p>\n<p class=\"35abpmkrc7reoxkzb\">Like most JS newcomers, I expected to save files, GET stuff from the web, and other async tasks the same way I was used to in Python and have async IO &apos;just work&apos;: Here&apos;s <a href=\"https:\/\/stackoverflow.com\/questions\/6968448\/where-is-body-in-a-nodejs-http-get-response\">me in 2011 expecting exactly that<\/a>.<\/p>\n<p class=\"35abpmkrc7reoxkzb\">Eventually I began understanding the idea of functions as values, that could be written inline, and passed to other functions as options. A callback was essentially a &apos;what to do next&apos; action. I understood callbacks, and learned common async patterns. I liked learning a lot about functions, scope, and closures. I used, but never liked callbacks: a nagging doubt said <em>this is the VMs job, not the programmers<\/em>.<\/p>\n<div class=\"the-point\">The people who didn&apos;t like JavaScript mainly complained about the callbacks, and I understood where they were coming from.<\/div>\n<p class=\"35abpmkrc7reoxkzb\">But I was still excited about JavaScript, and for the next few years I&apos;d go to every JS conference and meetup. In 2012-2013 a bunch of talks (and <a href=\"https:\/\/github.com\/dwyl\/learn-promises\">stickers<\/a>) appeared on Promises. Most conference talks begins with &apos;explain the problem you are trying to solve&apos;. Every promise talk began the same way: every talk began with a discussion of &apos;callback hell&apos; and the &apos;pyramid of doom&apos;.<\/p>\n<p class=\"35abpmkrc7reoxkzb\">The problem was,<br \/>\n<strong>most people I knew using JS weren&apos;t using pyramid of doom<\/strong>. We were using async, one of the popular npm packages. Even today it&apos;s still the most popular way to handle async flow control &#8211; more than q, bluebird or other libraries. If we had a long list of async tasks, that each depended on the result of the previous task, we&apos;d put that list in an array and use <strong>async.waterfall()<\/strong>. The tasks would line up neatly on the left. No pyramid.<\/p>\n<p class=\"35abpmkrc7reoxkzb\">So when a presenter came along, and talked about how we could replace our existing list of tasks, that neatly lined up on the left, with a new system where, er, things would neatly line up on the left, by refactoring everything, I wasn&apos;t particularly convinced. Nor was I alone: the node core folk seemed to agree, ripping an early implementaton of Promises out of node.<\/p>\n<div class=\"the-point\">If the point of Promises was to fix callback hell, then Promises with .then() wasn&apos;t that much better than async.waterfall()<\/div>\n<p class=\"35abpmkrc7reoxkzb\">The promise folks began advocating that <a href=\"https:\/\/blog.domenic.me\/youre-missing-the-point-of-promises\/\">there was a higher purpose to promises<\/a>: returning a value. This resonated a little more: functions should return values, whether they&apos;re async or not. Even in node a lot of people mistakenly thought <code>return cb(err, result)<\/code> meant the value you were returning would be used: in reality running the callback and returning <code>null<\/code> would do the same thing. So sync functions returned values, but async functions didn&apos;t return values: they took arguments for functions that operated on their results.<\/p>\n<div class=\"the-point\">&apos;Functions should return values&apos; was a good point, but still not being able to use the results directly didn&apos;t really improve things much.<\/div>\n<p class=\"35abpmkrc7reoxkzb\">So <code>.then()<\/code> never excited me, even after Promises were added to JS in <a href=\"https:\/\/developer.mozilla.org\/en\/docs\/Web\/JavaScript\/Reference\/Global_Objects\/Promise\">ES2015<\/a>. But I did keep an eye out &#8211; and an open mind &#8211; for something I heard was coming: <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Reference\/Operators\/await\">async await<\/a>.<\/p>\n<p class=\"35abpmkrc7reoxkzb\">async\/await is what&apos;s called <a href=\"https:\/\/en.wikipedia.org\/wiki\/Direct_style\">direct style<\/a>. From Wikipedia:<\/p>\n<blockquote>\n<p class=\"35abpmkrc7reoxkzb\">direct style is the usual style of sequential programming, in which control is passed implicitly by simply going to the next line<\/p>\n<\/blockquote>\n<p class=\"35abpmkrc7reoxkzb\">You still get all the non-blocking behavior JavaScript is known for, with one important difference:<\/p>\n<div class=\"the-point\">No callbacks, no .then(). <br class=\"35abpmkrc7reoxkzb\">Just going to the next line.<\/div>\n<p class=\"35abpmkrc7reoxkzb\">Async await is part of the ES2017 standard, in node since version 7 and <a href=\"https:\/\/caniuse.com\/#search=await\">all current browsers<\/a>.<\/p>\n<ul>\n<li><code>await<\/code> &#8211; is a way to await until a promise has returned a value (resolved). Error handling is plain old JavaScript: if something breaks (ie, a promise rejects), an Error is thrown. On the next line, you can just use the value like any other. No more <code>.then()<\/code>.<\/li>\n<li><code>async<\/code> &#8211; a thing you add to the function containing the <code>await<\/code> keyword. Technically it starts a special context, practically it&apos;s a thing you need to add.<\/li>\n<\/ul>\n<p class=\"35abpmkrc7reoxkzb\">Here&apos;s a demo:<\/p>\n<pre><code class=\"hljs\"><span class=\"hljs-keyword\">const<\/span> util = <span class=\"hljs-built_in\">require<\/span>(<span class=\"hljs-string\">'util'<\/span>),\n    fs = <span class=\"hljs-built_in\">require<\/span>(<span class=\"hljs-string\">'fs'<\/span>),\n    writeFile = util.promisify(fs.writeFile),\n    request = <span class=\"hljs-built_in\">require<\/span>(<span class=\"hljs-string\">'superagent'<\/span>),\n    stat = util.promisify(fs.stat),\n    sorts = <span class=\"hljs-built_in\">require<\/span>(<span class=\"hljs-string\">'sorts'<\/span>),\n    log = <span class=\"hljs-built_in\">console<\/span>.log;\n<span class=\"hljs-keyword\">const<\/span> getPhotosAndSaveThem = <span class=\"hljs-keyword\">async<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span>(<span class=\"hljs-params\">&nbsp;<\/span>)<\/span>{\n    <span class=\"hljs-keyword\">const<\/span> response = <span class=\"hljs-keyword\">await<\/span> request.get(<span class=\"hljs-string\">'https:\/\/jsonplaceholder.typicode.com\/photos'<\/span>);\n    <span class=\"hljs-keyword\">const<\/span> photos = response.body.sort(sorts.byKey(<span class=\"hljs-string\">'title'<\/span>))\n    <span class=\"hljs-keyword\">await<\/span> writeFile(<span class=\"hljs-string\">'photos.json'<\/span>, <span class=\"hljs-built_in\">JSON<\/span>.stringify(photos, <span class=\"hljs-literal\">null<\/span>, <span class=\"hljs-number\">2<\/span>))\n    <span class=\"hljs-keyword\">const<\/span> status = <span class=\"hljs-keyword\">await<\/span> stat(<span class=\"hljs-string\">'photos.json'<\/span>);\n    log(<span class=\"hljs-string\">`I got some data from an API and saved the responses at <span class=\"hljs-subst\">${status.birthtime}<\/span>`<\/span>)\n}\n<span class=\"hljs-keyword\">const<\/span> start = <span class=\"hljs-keyword\">async<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span>(<span class=\"hljs-params\">&nbsp;<\/span>)<\/span>{\n    <span class=\"hljs-keyword\">try<\/span> {\n        <span class=\"hljs-keyword\">await<\/span> getPhotosAndSaveThem();\n    } <span class=\"hljs-keyword\">catch<\/span> (error) {\n        log(<span class=\"hljs-string\">`Oh no, something went wrong!`<\/span>, error);\n    }\n}\nstart();\n<\/code><\/pre>\n<p class=\"35abpmkrc7reoxkzb\">CertSimple is built in node. <a href=\"https:\/\/nodejs.org\/en\/blog\/release\/v8.0.0\/\">Node 8<\/a> came out last week, it will be the first LTS version of node with async\/await support. Shortly afterward I decided to spend a day trying async\/await on CertSimple&apos;s code.<\/p>\n<ul>\n<li>If, after a day, I wasn&apos;t remarkably reducing the complexity of code, or if I didn&apos;t feel confident with await, I&apos;d stash the changes and not bother.<\/li>\n<li>If it worked out, I&apos;d start using async\/await as the default way to handle asyncronous tasks.<\/li>\n<\/ul>\n<p class=\"35abpmkrc7reoxkzb\">Here&apos;s what I learned.<\/p>\n<div class=\"the-point\">This is the best thing to happen to JavaScript in years.<\/div>\n<p class=\"35abpmkrc7reoxkzb\">Even for someone who previously avoided Promises if possible, it only took about a day to feel comfortable with <code>async<\/code>. We&apos;ve started moving CertSimple&apos;s code to <code>async\/await<\/code>.<\/p>\n<p class=\"35abpmkrc7reoxkzb\">As we edit, we remove <code>cb<\/code> and <code>.then()<\/code> replacing them with <code>await =<\/code>. We update the unit tests. We forget to add <code>async<\/code> to functions, then eslint reminds us, then we forget again. Occasionally we commit stuff like this &#8211; the code in question looks at DNS, reverse DNS, whois and HTTP headers. To be fair, it was a little pyramid-y:<\/p>\n<p class=\"35abpmkrc7reoxkzb\"><amp-img layout=\"responsive\" alt=\"an image\" src=\"https:\/\/certsimple.com\/images\/blog\/await-commit.png\" width=\"599\" height=\"111\"><\/amp-img><\/p>\n<p class=\"35abpmkrc7reoxkzb\">Six years after I got confused about async, JS now works <a href=\"https:\/\/stackoverflow.com\/a\/6968657\/123671\">like I expected it to<\/a>:<\/p>\n<div class=\"the-point\">JS now has a syntax that&apos;s familiar to traditional Ruby \/ Python programmers and a speed that isn&apos;t.<\/div>\n<p class=\"35abpmkrc7reoxkzb\">Of course, await still uses promises. And though I never liked <code>.then()<\/code>, I&apos;m grateful to the <a href=\"https:\/\/twitter.com\/domenic\">Promise authors<\/a> for creating them. A huge thanks to <a href=\"https:\/\/twitter.com\/bterlson\">Brian Terlson<\/a> of Microsoft for a bunch of the work in making <code>await<\/code> itself happen.<\/p>\n<p class=\"35abpmkrc7reoxkzb\">This is the best thing to happen to JavaScript in years.<\/p>\n<div class=\"bio\">\n\t\t<amp-img layout=\"fixed\" alt=\"an image\" class=\"avatar\" src=\"https:\/\/certsimple.com\/images\/blog\/mike.jpg\" width=\"48\" height=\"48\"><\/amp-img><\/p>\n<p class=\"date\">Mike MacCana, founder at CertSimple.<\/p>\n<\/p><\/div>\n<div class=\"blog-about-certsimple\">\n<h2 id=\"about-certsimple\">CertSimple makes EV HTTPS fast and painless.<\/h2>\n<div class=\"details\">\n\t\t\t<amp-img layout=\"fixed\" alt=\"an image\" class=\"compare\" src=\"https:\/\/certsimple.com\/images\/blog\/compare.svg\" width=\"200\" height=\"237\"><\/amp-img><\/p>\n<p class=\"35abpmkrc7reoxkzb\">An EV HTTPS certificate verifies the company behind your website. But getting verified is a slow painful process. CertSimple <a href=\"https:\/\/certsimple.com\/about\">provides EV HTTPS certificates <strong>40x faster<\/strong><\/a> than other vendors. We check your company registration, network details, physical address and flag common errors <strong>before you pay us<\/strong>, provide verification steps specific for your company, update in realtime during the process, and even check your infrastructure to help you set up HTTPS securely.<br class=\"35abpmkrc7reoxkzb\"><br \/>\n\t\t\t<strong><a href=\"https:\/\/certsimple.com\">Verify your site now!<\/a><\/strong><\/p>\n<\/p><\/div>\n<\/p><\/div>\n<div class=\"related-content\">\n<div class=\"other-articles\">\n\t\t\t<a href=\"https:\/\/certsimple.com\/blog\/flattening-javascript-async-await\" class=\"other-article flattening-javascript-async-await\"><\/p>\n<header>\n\t\t\t\t\tHow to flatten JavaScript<br \/>\n\t\t\t\t<\/header>\n<p>\t\t\t<\/a><br \/>\n\t\t\t<a href=\"https:\/\/certsimple.com\/blog\/ecc-https-certificate-support\" class=\"other-article ecc-https-certificate-support\"><\/p>\n<header>\n\t\t\t\t\tECDSA HTTPS certificates are faster and more secure. Here&apos;s where you (still) can&apos;t use them.<br \/>\n\t\t\t\t<\/header>\n<p>\t\t\t<\/a>\n\t\t<\/div>\n<\/p><\/div>\n<\/div>\n<div class=\"bonus-footer\">\n<div>\n\t\t<amp-img layout=\"fixed\" alt=\"an image\" class=\"penny\" src=\"https:\/\/certsimple.com\/images\/blog\/penny.svg\" width=\"100\" height=\"115\"><\/amp-img><\/p>\n<p class=\"35abpmkrc7reoxkzb\">Copyright &#xA9; 2018 <br class=\"35abpmkrc7reoxkzb\">CertSimple Limited<\/p>\n<\/p><\/div>\n<div>\n<p class=\"35abpmkrc7reoxkzb\">\n\t\t\t<a href=\"https:\/\/certsimple.com\">Get an EV certificate<\/a>\n\t\t<\/p>\n<p class=\"35abpmkrc7reoxkzb\">\n\t\t\t<a href=\"https:\/\/certsimple.com\/help\">Help<\/a>\n\t\t<\/p>\n<p class=\"35abpmkrc7reoxkzb\">\n\t\t\t<a href=\"https:\/\/certsimple.com\/why-ev-ssl\">Why EV<\/a>\n\t\t<\/p>\n<p class=\"35abpmkrc7reoxkzb\">\n\t\t\t<a href=\"https:\/\/certsimple.com\/about\">Why CertSimple<\/a>\n\t\t<\/p>\n<\/p><\/div>\n<div>\n<p class=\"35abpmkrc7reoxkzb\">\n\t\t\t<a href=\"https:\/\/certsimple.com\/orders\">Log in<\/a>\n\t\t<\/p>\n<p class=\"35abpmkrc7reoxkzb\">\n\t\t\t<a href=\"https:\/\/certsimple.com\/help\/contact\">Contact<\/a>\n\t\t<\/p>\n<p class=\"35abpmkrc7reoxkzb\">\n\t\t\t<a href=\"https:\/\/certsimple.com\/help\/prices\">Pricing<\/a>\n\t\t<\/p>\n<p class=\"35abpmkrc7reoxkzb\">\n\t\t\t<a href=\"https:\/\/certsimple.com\/help\">FAQ<\/a>\n\t\t<\/p>\n<p class=\"35abpmkrc7reoxkzb\">\n\t\t\t<a href=\"mailto:team@certsimple.com\"><br \/>\n\t\t\t\tPress<br \/>\n\t\t\t<\/a>\n\t\t<\/p>\n<\/p><\/div>\n<div>\n<p class=\"35abpmkrc7reoxkzb\">\n\t\t\t<a href=\"https:\/\/certsimple.com\/blog\">Blog<\/a>\n\t\t<\/p>\n<p class=\"35abpmkrc7reoxkzb\">\n\t\t\t<a target=\"_blank\" href=\"https:\/\/twitter.com\/certsimple\">Twitter<\/a>\n\t\t<\/p>\n<p class=\"35abpmkrc7reoxkzb\">\n\t\t\t<a target=\"_blank\" href=\"https:\/\/github.com\/certsimple\">GitHub<\/a>\n\t\t<\/p>\n<\/p><\/div>\n<\/div>\n","protected":false,"raw":""},"excerpt":{"rendered":"<p>CertSimple Fast painless EV HTTPS CertSimple Fast painless EV [&hellip;]<\/p>\n","protected":false},"author":0,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"template_11.php","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"class_list":["post-107","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>CertSimple | ES2017&amp;apos;s async\/await is the best thing to ever happen to JavaScript<\/title>\n<meta name=\"description\" content=\"No callbacks, no .then()\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/certsimple.com\/blog\/javascript-equals-async-await\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"CertSimple | ES2017&amp;apos;s async\/await is the best thing to ever happen to JavaScript\" \/>\n<meta property=\"og:description\" content=\"No callbacks, no .then()\" \/>\n<meta property=\"og:url\" content=\"https:\/\/certsimple.com\/blog\/javascript-equals-async-await\" \/>\n<meta property=\"og:site_name\" content=\"CertSimple | EV SSL &amp; TLS for 2019\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/certsimple.com\/blog\/javascript-equals-async-await\",\"url\":\"https:\/\/certsimple.com\/blog\/javascript-equals-async-await\",\"name\":\"CertSimple | ES2017&apos;s async\/await is the best thing to ever happen to JavaScript\",\"isPartOf\":{\"@id\":\"https:\/\/certsimple.com\/#website\"},\"datePublished\":\"2026-03-12T17:26:58+00:00\",\"dateModified\":\"2026-03-12T17:26:58+00:00\",\"description\":\"No callbacks, no .then()\",\"breadcrumb\":{\"@id\":\"https:\/\/certsimple.com\/blog\/javascript-equals-async-await#breadcrumb\"},\"inLanguage\":\"en-CA\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/certsimple.com\/blog\/javascript-equals-async-await\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/certsimple.com\/blog\/javascript-equals-async-await#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/certsimple.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"CertSimple Fast painless EV HTTPS\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/certsimple.com\/#website\",\"url\":\"https:\/\/certsimple.com\/\",\"name\":\"CertSimple | EV SSL &amp; TLS for 2019\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/certsimple.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-CA\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"CertSimple | ES2017&apos;s async\/await is the best thing to ever happen to JavaScript","description":"No callbacks, no .then()","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:\/\/certsimple.com\/blog\/javascript-equals-async-await","og_locale":"en_US","og_type":"article","og_title":"CertSimple | ES2017&apos;s async\/await is the best thing to ever happen to JavaScript","og_description":"No callbacks, no .then()","og_url":"https:\/\/certsimple.com\/blog\/javascript-equals-async-await","og_site_name":"CertSimple | EV SSL &amp; TLS for 2019","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/certsimple.com\/blog\/javascript-equals-async-await","url":"https:\/\/certsimple.com\/blog\/javascript-equals-async-await","name":"CertSimple | ES2017&apos;s async\/await is the best thing to ever happen to JavaScript","isPartOf":{"@id":"https:\/\/certsimple.com\/#website"},"datePublished":"2026-03-12T17:26:58+00:00","dateModified":"2026-03-12T17:26:58+00:00","description":"No callbacks, no .then()","breadcrumb":{"@id":"https:\/\/certsimple.com\/blog\/javascript-equals-async-await#breadcrumb"},"inLanguage":"en-CA","potentialAction":[{"@type":"ReadAction","target":["https:\/\/certsimple.com\/blog\/javascript-equals-async-await"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/certsimple.com\/blog\/javascript-equals-async-await#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/certsimple.com\/"},{"@type":"ListItem","position":2,"name":"CertSimple Fast painless EV HTTPS"}]},{"@type":"WebSite","@id":"https:\/\/certsimple.com\/#website","url":"https:\/\/certsimple.com\/","name":"CertSimple | EV SSL &amp; TLS for 2019","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/certsimple.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-CA"}]}},"_links":{"self":[{"href":"https:\/\/certsimple.com\/wp-json\/wp\/v2\/pages\/107","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/certsimple.com\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/certsimple.com\/wp-json\/wp\/v2\/types\/page"}],"replies":[{"embeddable":true,"href":"https:\/\/certsimple.com\/wp-json\/wp\/v2\/comments?post=107"}],"version-history":[{"count":0,"href":"https:\/\/certsimple.com\/wp-json\/wp\/v2\/pages\/107\/revisions"}],"wp:attachment":[{"href":"https:\/\/certsimple.com\/wp-json\/wp\/v2\/media?parent=107"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}