介绍
通过generator 函数,使用yield
关键字,配合next方法来控制函数的进行,如果你对于generator函数不熟悉,建议先看generator和异步迭代和 generator
next函数调用之后返回一个对象:{value:xxx,done:xxx}
- value:是yield后面跟的值,如果后面是函数,则value则是函数的返回值
- done:当done为tue时,则generator函数已经走完了,反之则没走完,可以继续调用next方法
1 |
|
我们可以通过next方法控制函数的进行,同时给next( )方法传参数
如下
1 |
|
因此我们可以yield后面跟一个返回Promise的函数,然后调用next的时候把上一次resolve的值传进来,最后generator函数就可以返回最终Promise的值,代码如下
1 |
|
当然,上面的代码是写死的,实际中我们并不知道generator
函数中有多少yield
实现一下async await
1 |
|
最后实现的函数就是co函数库的核心原理(自动执行generator的库)
我们一般使用async await 来处理Promise, await 后面跟的函数也是会返回一个Promise,但如果我们使用js时,await后面跟一个原始值,例如await 4
也会有’排队’的效果,可以看作它使用了Promise.resolve(4)包装了一层
参考文章:7张图,20分钟就能搞定的async/await原理!
- 本文作者: leftover
- 版权声明: 本文版权归leftover所有,如需转载清标明来源!