Generator函数 有什么使用场景?

bluedog 106个月前 提问 源自: ECMAScript 6入门|Generator
0

Generator函数是一个函数的内部状态的遍历器(也就是说,Generator函数是一个状态机)。

形式上,Generator函数是一个普通函数,但是有两个特征。

一是,function命令与函数名之间有一个星号; 二是,函数体内部使用yield语句,定义遍历器的每个成员,即不同的内部状态。

  • 0
    ciga 106个月前 回答

    generator的应用场景举例如下:

    1. 延迟执行

    generator调用后,其状态是挂起的,通过调用next()来让其继续执行,从而达到延迟执行的效果:

    function* fibGen (n) {
      var current = 0, next = 1, swap;
      for (var i = 0; i < n; i++) {
        swap = current, current = next
        next = swap + next
        yield current
      }
    }
    var fibIter = fibGen(20)
    var next = fibIter.next()
    console.log(next.value)
     
    setTimeout(function () {
     var next = fibIter.next()
     console.log(next.value)
    },2000)

    2. 无限长的序列

    由于generator是延迟执行的,因此你可以使用generator创建一个无限长的序列:

    function* fibGen () {
      var current = 0, next = 1, swap
      while (true) {
        swap = current, current = next
        next = swap + next
        yield current
      }
    }
    for (var num of fibGen()) {
     if (num < 5000) break
    }
    console.log(num) // 6765

    3.异步流程控制

    这个可以参考https://github.com/tj/co 的源代码,一个基于generator进行异步流程控制的js库