{"componentChunkName":"component---src-components-blog-template-js","path":"/blog/asynchronous/","result":{"data":{"markdownRemark":{"frontmatter":{"title":"Asynchronous","date":"2019-05-27"},"html":"<p>What is Asynchronous?\nAsynchronous usually happens when we are interacting with a database or API.\nThe term asynchronous can be a bit difficult to explain. To understand it, let's take a look at what <code class=\"language-text\">synchronous</code> is, more specific, what synchronous task is.\nIn programming, synchronous task is a task that is executed in sequence, meaning that it will wait for current task to be finished before the next task is executed.\nOn the other hand, Asynchronous task or we can call it <code class=\"language-text\">async</code> task can continue executing the next task without waiting for the current task to be finished first.</p>\n<h4>Why Async?</h4>\n<p>Then why do we use async? We can understand it more simple using an example:\nIf we have a page that needs to load a set of images, if we do it synchronously, the page will looks like it's frozen and the user will wonder what is going on. But if we do it with async method, we can show a loading spinner while the images are being loaded from the database.\nSo async gives benefit of responsiveness, the user can still interact or in the above case, see interaction while waiting the task finished.</p>\n<h4>Handling async</h4>\n<p>There are two popular methods for handling async task:</p>\n<ol>\n<li>Promise</li>\n<li>Async-await</li>\n</ol>\n<p>With Promise, we use callback function such as .then for success result and .catch for error result.</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> <span class=\"token function-variable function\">getRequest</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span>\n  <span class=\"token function\">fetchData</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">.</span><span class=\"token function\">then</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">data</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n      console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>data<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">return</span> data<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">.</span><span class=\"token function\">catch</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">error</span> <span class=\"token operator\">=></span> console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>error<span class=\"token punctuation\">.</span>message<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>With Async-await, we use it just like writing synchronous code with try catch block.</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> <span class=\"token function-variable function\">getRequest</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">async</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">try</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">const</span> data <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> <span class=\"token function\">fetchData</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>data<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">return</span> data<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span> <span class=\"token keyword\">catch</span> <span class=\"token punctuation\">(</span>error<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>error<span class=\"token punctuation\">.</span>message<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>Which method is better? That depends on how complex or complicated the async task is, if the async task requires chaining several promises together, rather than nesting several .then functions, it is better to write it using async-await as it will make the code more readable.</p>"}},"pageContext":{"slug":"/asynchronous/"}},"staticQueryHashes":[]}