- generator通过function* 进行定义,并且除了return语句,还可以使用yield进行返回数据;
1 | function* fib(max) { |
- 调用生成器方法,生成对应的生成器。如果需要通过生成器生成值,则需要调用对应的生成方法;
1 | var f = fib(5); |
通过调用next()执行生成器,当生成器执行到yield语句时,就会返回一个对象给next()函数,然后生成器进入暂停的状态;
此时的对象,value属性是yield语句返回的值,done属性表示生成器是否已经结束了;
for..of遍历生成器
1 | for (var x of fib(10)) { |
保存函数状态
生成器拥有对象才具有的特性:保存函数的状态;
同样是生成序列,使用对象的方式进行生成;
1 | var fib = { |
协程同步效果
生成器能让我们实现协程的效果,让异步代码看起来像同步的一样;
1 | ajax('http://url-1', data1, function (err, result) { |
通过生成器改写成同步代码的形式:
1 | try { |