一、generator函数介绍
如上图, genrator函数的作用是对函数内部状态依次记录。它的主要特点有四点
1.函数名前面用*标记,
2.函数内部有yield表达式,只有当yield 后面的表达式执行完时,才会进行下一步
3.函数必须通过next执行
4.每个next执行完后会返回一个对象,包含value和done属性,value属性代表的是yield后面表达式的返回值,done属性代表是否完全执行完所有步骤。
二、next()参数
重点:next里传的参数,代表的是上一个yield 后表达式返回的值。这么说有点绕,通过一个例子来理解:1
1.第一步我们将x=5传入参数,得到g2
2.g2.next()执行 第一个yield表达 yield(x + 1), 所以value= 5 + 1 = 6
3.再次执行g2.next(12), 这就将上一步yield(x + 1)的值修改成了12,所以y= 2 * 12 = 24。因此yield(y/3)返回的value是24/3=8
4.最后执行g2.next(13), 同样也将上一步yield(y/3)的值修改成了13,所以z=13。因此x+y+z = 5 + 24 + 13 = 42,最后一步value = 42 ,done=true。
三、对generator函数进行封装,实现Async await函数
最后返回结果如下:
参考文章:https://juejin.im/post/5cb9721cf265da03b36ee346