{"componentChunkName":"component---src-components-blog-template-js","path":"/blog/generator/","result":{"data":{"markdownRemark":{"frontmatter":{"title":"Generator Function","date":"2019-06-25"},"html":"<p>Generator function is a new feature in ES6, it is not like a normal function, with generator function we can control (pause, stop, resume) the execution process inside it.\nI will give comparison between those two to explain how generator function works.</p>\n<p>The code below is a normal function:</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">function</span> <span class=\"token function\">add</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">a<span class=\"token punctuation\">,</span> b</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><span class=\"token string\">'Start adding two numbers'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">const</span> result <span class=\"token operator\">=</span> a <span class=\"token operator\">+</span> b<span class=\"token punctuation\">;</span>\n  console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">'The result is : '</span> <span class=\"token operator\">+</span> result<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><span class=\"token string\">'End of function'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>With generator function, we can write the code above into this:</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">function</span><span class=\"token operator\">*</span> <span class=\"token function\">add</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">a<span class=\"token punctuation\">,</span> b</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">yield</span> console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">'Start adding two numbers'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">const</span> result <span class=\"token operator\">=</span> a <span class=\"token operator\">+</span> b<span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">yield</span> console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">'The result is : '</span> <span class=\"token operator\">+</span> result<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">yield</span> console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">'End of function'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>and then we execute that function like so:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">var gen <span class=\"token operator\">=</span> add<span class=\"token punctuation\">(</span><span class=\"token number\">2,3</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>This will not give any results yet, because this <strong>add</strong> function is a generator and is now in pause, to continue executing the function, we need to use <code class=\"language-text\">next()</code></p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">gen.next<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>The first we use next() will give result in console:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">Start adding two numbers\n<span class=\"token punctuation\">{</span>value: undefined, done: false<span class=\"token punctuation\">}</span></code></pre></div>\n<p>That <code class=\"language-text\">done: false</code> means that this generator function is not finished yet, there is more to it, so we can use next() again</p>\n<p>The second next() will give result:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">The result is <span class=\"token builtin class-name\">:</span> <span class=\"token number\">5</span>\n<span class=\"token punctuation\">{</span>value: undefined, done: false<span class=\"token punctuation\">}</span></code></pre></div>\n<p>The third next() will give result:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">End of <span class=\"token keyword\">function</span>\n<span class=\"token punctuation\">{</span>value: undefined, done: false<span class=\"token punctuation\">}</span></code></pre></div>\n<p>The fourth next() will give result:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token punctuation\">{</span>value: undefined, done: true<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Now the generator function has reached its end of execution process, the value is undefined because we did not return anything.</p>\n<p>As you can see, generator is very powerful, we can pause the execution process as it deals with other things, and then come back to it and resume the execution later.</p>"}},"pageContext":{"slug":"/generator/"}},"staticQueryHashes":[]}