Khái niệm, định nghĩa Generator function trong Javascript là gì?

Có thể hiểu Generator function là một function, có khả năng tạm ngưng thực thi trước khi hàm kết thúc, và có thể tiếp tục chạy ở 1 thời điểm khác.

function* là một trong những chức năng mới của Javascript trong ECMAScript 2015 (6th Edition, hay tắt là ES6). function* giúp khai báo 1 generator function, trả về 1 Generator object.
Với chức năng mới này, hàm có thể dừng thực thi bất cứ thời điểm nào, đợi async chạy xong, xong tiếp tục thực thi.

Hàm sẽ không được thực thi ngay sau khi gọi, mà thay vào đó generator function trả về iterator, giống như con trỏ trong vòng lặp.
Sau khi hàm next() của iterator được gọi, generator function sẽ thực thi hàm cho đến khi gặp từ khóa yield đầu tiên. yield sẽ trả về giá trị cho iterator, generator function kết thúc cho đến khi hết giá trị để yield.

<span class="kwd">function</span><span class="pun">*</span><span class="pln"> ask</span><span class="pun">()</span> <span class="pun">{</span> 
   <span class="kwd">const</span><span class="pln"> name </span><span class="pun">=</span> <span class="kwd">yield</span> <span class="str">"What is your name?"</span><span class="pun">;</span> 
   <span class="kwd">const</span><span class="pln"> sport </span><span class="pun">=</span> <span class="kwd">yield</span> <span class="str">"What is your favorite sport?"</span><span class="pun">;</span> 
   <span class="kwd">return</span> <span class="str">`${name}'s favorite sport is ${sport}`</span><span class="pun">;</span> 
<span class="pun">}</span>  
<span class="kwd">const</span><span class="pln"> it </span><span class="pun">=</span><span class="pln"> ask</span><span class="pun">();</span><span class="pln"> 
console</span><span class="pun">.</span><span class="pln">log</span><span class="pun">(</span><span class="pln">it</span><span class="pun">.</span><span class="kwd">next</span><span class="pun">());</span><span class="pln"> 
console</span><span class="pun">.</span><span class="pln">log</span><span class="pun">(</span><span class="pln">it</span><span class="pun">.</span><span class="kwd">next</span><span class="pun">(</span><span class="str">'Ethan'</span><span class="pun">));</span><span class="pln">  
console</span><span class="pun">.</span><span class="pln">log</span><span class="pun">(</span><span class="pln">it</span><span class="pun">.</span><span class="kwd">next</span><span class="pun">(</span><span class="str">'Cricket'</span><span class="pun">));</span>