Generator
是 JavaScript ES6 才提供的Function,它提供了一個非常強大的功能,跟Iterators
相似,讓開發者只要透過一個function與yield
定義出符合自己需求的Iterators。
其實 Generator 大致上只要了解以下兩個原理,對 Generator 就不會那麼的陌生了。
- input value (將值輸入至 generator function 中當下的
yield
) - output value (移至generator function 中當下一個
yield
並且return)
function* gen() {
var v1 = yield 2;
console.log(v1);
var v2 = yield v1 * 2;
console.log(v2);
yield v2 * 2;
}
var g = gen();
console.log(g.next().value);
console.log(g.next(3).value);
console.log(g.next(2).value);
執行結果:
- 執行g.next().value時,移至第一個yield時停止,return 2。
- 執行g.next(3).value時,會先將3傳入至當下yield,v1 = 3。開始移至下一個yield,輸出3,v1*2,return 6。
- 執行g.next(2).value時,會先將2傳入至當下yield,v2 = 2。開始移至下一個yield,輸出2, v2*2,return 4。
其實 Generators 還有很多種用途,其中也可以搭配 Promise 一起使用,使得可以必免掉原有使用 callback function 的 callback hell。
謝謝分享!Generator是ES6很重要的特性。後面的續集會介紹搭配一些library(例如
co
)的使用嗎?