es6:generator生成器

weixin_34050427發表於2018-12-11

1、 執行第一條,name值為undefind,第二條,傳入字串"hehe "會被賦值給上一個生成器執行結果的返回值name

function* gen(){
  let name = yield "this is first one";
  console.dir(name);
  yield  name+"this is second one";
  yield  "this is third one";
  yield "this is fourth one";
  return "done";
}

const testgen = gen();
console.log(testgen.next());
console.log(testgen.next("hehe "));
// console.log(testgen.next());
// console.log(testgen.next());
// console.log(testgen.next());
9628812-0907d2d99d231d81.png
image.png

2、必須等上一條yield語句執行完畢才會執行下一條yield語句
這樣特性等好處是“可以用同步等方式寫非同步程式碼”,例如取伺服器資料,不需要再使用回撥函式,避免了回撥函式多層巢狀的問題。(javascrip回撥地獄)


9628812-a93f2fcda59aeb1a.png
回撥地獄示例

9628812-ebfecf3a5ff31d38.png
promise方式,依然是巢狀

相關文章