1-0

Generators 探討(一)

Generator 是 JavaScript ES6 才提供的Function,它提供了一個非常強大的功能,跟Iterators相似,讓開發者只要透過一個function與yield定義出符合自己需求的Iterators。

其實 Generator 大致上只要了解以下兩個原理,對 Generator 就不會那麼的陌生了。

  1. input value (將值輸入至 generator function 中當下的yield)
  2. 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);

執行結果:

  1. 執行g.next().value時,移至第一個yield時停止,return 2。
  2. 執行g.next(3).value時,會先將3傳入至當下yield,v1 = 3。開始移至下一個yield,輸出3,v1*2,return 6。
  3. 執行g.next(2).value時,會先將2傳入至當下yield,v2 = 2。開始移至下一個yield,輸出2, v2*2,return 4。

其實 Generators 還有很多種用途,其中也可以搭配 Promise 一起使用,使得可以必免掉原有使用 callback function 的 callback hell。

1筆討論 回應文章

謝謝分享!Generator是ES6很重要的特性。後面的續集會介紹搭配一些library(例如co)的使用嗎?