第二十四章:生成器函数 generator

是什么

参考说明

  • generator(生成器)是ES6标准引入的新的数据类型。一个generator看上去像一个函数,但可以返回多次。
  • generator和函数不同的是,generator由function定义(注意多出的号),并且,除了return语句,还可以用yield返回多次。
  • 生成器函数需要 next() 方法才能执行
  • 生成器函数遇到 yield 即停
function *test () {
  console.log('111')
  var a = yield '111-输出';
  console.log('222', a)
  var b = yield '222-输出';
  console.log('333', b)
  var c = yield '333-输出';
  console.log(c)
}

test()

var newTest = test()
var test1 = newTest.next()
console.log(test1);
var test2 = newTest.next('A')
console.log(test2);
var test3 = newTest.next('B')
console.log(test3);
var test4 = newTest.next('C')
console.log(test4);
generator 函数演示

可执行生成器

可执行生成器
function getData1(){
  return new Promise((resolve,reject)=>{
      setTimeout(()=>{
          resolve("data1")
      },1000)
  })
}
function getData2(){
  return new Promise((resolve,reject)=>{
      setTimeout(()=>{
          resolve("data2")
      },1000)
  })
}

function getData3(){
  return new Promise((resolve,reject)=>{
      setTimeout(()=>{
          resolve("data3")
      },1000)
  })
}

function *gen(){
  var f1 = yield getData1();
  console.log(f1)
  var f2 = yield getData2(f1);
  console.log(f2)
  var f3 =yield getData3(f2)

  console.log(f3)
}

function run(fn){

  var g = fn()

  function next(data){
      var result= g.next(data);

      if(result.done){
          return result.value
      }

      result.value.then(res=>{
          next(res)
      })
  }
  next()
  // g.next()
}

run(gen)
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容