Generators

Generators生成器免费看

什么是生成器,如何使用生成器结合异步代码进行使用

2018-11-21侠课岛    初级拔高       

前端/前端/异步JavaScript系列(翻译) 15     0     694

以下是第五课的翻译内容


这节课讲的内容是异步 Javascript Generators(生成器)

Generators(生成器)

生成器是 ES6 里一个相对新的涉及异步的 Javascript API。这节课不是介绍生成器,如果需要从头了解的话,我的视频频道里会有专门的 ES6 介绍。

接下来准备简介如何使用生成器与结合异步代码进行使用。

建立一个生成器,它的样子像是一个函数,区别是函数右旁加一个星号,这里我给它一个函数名 gen,然后其他样子跟函数差不多,此外,生成器可以通过 yield 关键字让函数停止,当代码里出现 yield,会执行到右侧并停在这里。

下例代码解析:

  • 当生成器运行时,Javascript 从右到左执行,遇到 yield 后会取得 10 并停止继续运行,意味着 10 传递出生成器之外,我们可以在外面进行使用,然后可以通过 next 方法继续运行生成器;
  • 用变量 myGen 保存生成器,你可能认为这样已经运行了生成器 gen,但实际上这里只是准备好生成器,需要对这个迭代的对象(myGen)使用 next 方法来运行代码;
  • 当运行代码遇到 yield 后,会停在这里,并且返回一个迭代对象给我们,包含了表达式的值与是否已经完成yield 右侧的表达式的值是 10,还没完成迭代。
  • 继续调用 next 方法,继续往下一步执行,同样返回一个迭代对象,第二次没有返回任何值,所以 value 会是 undefined
function* gen() {
    var x = yield 10;
}
var myGen = gen();

console.log(myGen.next()); // {value: 10, done: false},迭代还没完成,所以 done 是 false
console.log(myGen.next()); // {value: undefined, done: true},迭代已完成,done 是 true
  • 假如我们想回传值给生成器的下一步操作,next 方法里传参:
function* gen() {
    var x = yield 10;
    console.log(x); // 30,回传值会赋值给 x,即 var x = 30;
}
var myGen = gen();

console.log(myGen.next()); // {value: 10, done: false},迭代还没完成,所以 done 是 false
console.log(myGen.next(30)); // {value: undefined, done: true},迭代已完成,done 是 true


本教程图文或视频等内容版权归侠课岛所有,任何机构、媒体、网站或个人未经本网协议授权不得转载、转贴或以其他方式复制发布或发表。

评价

15

本课评分:
  •     非常好
难易程度:
  •     适中的
|
教程
粉丝
主页

签到有礼

已签到2天,连续签到7天即可领取7天全站VIP

  • 1
    +2 金币
  • 2
    +3 金币
  • 3
    +5 金币
  • 6
    +7 金币
  • 5
    +6 金币
  • 4
    暖心福利
    自选分类VIP ×1天
  • 7
    惊喜大礼

    自选分类VIP ×3天 +20金币
  • 持续签到 +8 金币

金币可以用来做什么?