生成器函式generator

尼古拉斯二嘎發表於2020-12-10
function * fn(){
  yield 10;
  y = yield 'foo';
  yield y;
}

var test = fn();
console.log(test.next()) // { value: 10, done: false }
console.log(test.next()); // { value: 'foo', done: false }
console.log(test.next(11)) // { value: 11, done: false }
console.log(test.next()) // { value: undefined, done: true }

1、函式生成器特點是函式名前面有一個‘*’
2、通過呼叫函式生成一個控制器
3、呼叫next()方法開始執行函式
4、遇到yield函式將暫停 5、再次呼叫next()繼續執行函式

function fn1() {
  //假設這是一個ajax請求
  return new Promise((resolve) => {
    resolve(1)
  })
}
function fn2() {
  //假設這是一個ajax請求
  return new Promise((resolve) => {
    resolve(2)
  })
}
function fn3() {
  //假設這是一個ajax請求
  return new Promise((resolve) => {
    resolve(3)
  })
}
//這裡是函式生成器
function* g() {
  //當非同步操作完畢yield會得到值
  //這裡會自動繼續執行
  var res1 = yield fn1();
  var res2 = yield fn2();
  var res3 = yield fn3();
}
var test = g();
// it.next().value;
test.next().value.then((res1) => {
   console.log(res1)
  test.next().value.then(res2 => {
    console.log(res2)
  })
})

相關文章