定義
用來重複回饋的序列。但是可以暫停,而且還能從暫停的地方繼續下去。
就像是一種迴圈,但是這種迴圈不是有條件(或次數)的,是要把每個對象走過。
用法
注意兩件事情:
function*
定義yield
暫停function* myGenerator() {
yield 1;
yield 2;
yield 3;
}
const c = myGenerator();
console.log(c.next());
console.log(c.next());
console.log(c.next());
console.log(c.next());
首先,用function*
定義,並且使用yield
暫停。
叫用時使用next()
,就會執行到下一個yield
,
然後回傳一組物件:(value, done)。
done比較特別,就是告訴你,這個 myGenerator 走完沒。
所以印出:
{ value: 1, done: false }
{ value: 2, done: false }
{ value: 3, done: false }
{ value: undefined, done: true }
在這裡,我的疑問是:執行到yield 3
時,後面也沒有值了,為什麼done還是false?
那是因為 yield 只是負責「暫停」,不是負責結束。
所以要到下一個 next(),因為沒有多的 yield,才算結束。
如果需要結束,也可以使用return()
喔~