JS异步之generator介绍

了解细节可以访问阮一峰大神的ES6入门https://es6.ruanyifeng.com/#docs/generator,下面是我自己总结的一些介绍。
一、Generator

Generator 函数有多种理解角度。语法上,首先可以把它理解成,Generator 函数是一个状态机,封装了多个内部状态。

执行 Generator 函数会返回一个遍历器对象,也就是说,Generator 函数除了状态机,还是一个遍历器对象生成函数。返回的遍历器对象,可以依次遍历 Generator 函数内部的每一个状态。
二、next一些细节

1、第一次调用返回一个迭代器对象。

2、后面每一次调用next()返回值为到达的yelid的后面的值

3、next()可以传一个参数作为上一个yelid的值

4、next()遇到return语句,返回语句的值

5、返回的迭代器使用for …of…循环不会遍历到return的值,因为return在迭代器中done:true
三、throw
1、如果内部有try…catch,错误会在generator内部被处理,每个try…catch只能处理一处错误,如果有错误没有被处理,错误会被向外抛出,可以由外部try…catch处理
2、throw()方法执行后,会附带执行一条next();
四、return
1、Generator 函数返回的遍历器对象,还有一个return方法,可以返回给定的值,并且终结遍历 Generator 函数。
2、返回值的value属性就是return方法的参数。并且,Generator 函数的遍历就终止了,返回值的done属性为true,以后再调用next方法,done属性总是返回true。
3、如果内部有try…finally语句,会直接跳转到finally中执行
五、throw、next、return总结
next()、throw()、return()这三个方法本质上是同一件事,可以放在一起理解。它们的作用都是让 Generator 函数恢复执行,并且使用不同的语句替换yield表达式。

next()是将yield表达式替换成一个值。
throw()是将yield表达式替换成一个throw语句。
return()是将yield表达式替换成一个return语句。
六、yelid表达式
如果yield表达式后面跟的是一个遍历器对象,需要在yield表达式后面加上星号,表明它返回的是一个遍历器对象。这被称为yield
表达式。
七、generator和遍历器关系
Generator 函数总是返回一个遍历器,ES6 规定这个遍历器是 Generator 函数的实例,也继承了 Generator 函数的prototype对象上的方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值