generator类型

2020-04-28  本文已影响0人  练习时长2年半的个人练习生
generator
next

generator()返回的是一个generator对象。用next 实现分阶段调用generator,每次返回值是一个对象{value:yield后边的值,done:布尔值},done 属性是一个布尔值,表示 Generator 函数是否执行完毕,即是否还有下一个阶段

当代码执行完,或者 遇到return时 done变为true;

     function* fn(){
          let id = 0;
          yield ++id;
          yield ++id
     }
   let aa = fn()
   console.log(aa.next()) //{value:1,done:false}
   console.log( aa.next())//{value:2,done:false}
  console.log( aa.next())//{value: undefined, done: true}


  function* default_id(id) {
    while (true) {//while 是为了保证能一直阶段性返回
      yield ++id
    }
  }
  let idConstructor = default_id(0)
  console.log(idConstructor.next())//{value:1,done:false}
  console.log(idConstructor.next())//{value:2,done:false}
  console.log(idConstructor.next())//{value:3,done:false}
for of

for of 可以一次性执行generator 所有结果。

function* saveMoney(){
      let sum = 0;
      
      while(sum <999999999){
         sum +=10000000
         yield  sum
      }

      return '赚够了'
  }
  let generator = saveMoney();
  for(let res of generator){
    console.log(res) 
  }
  //执行结果  1,2,3,4,5
上一篇 下一篇

猜你喜欢

热点阅读