Generator函数 & Async await实现

一、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