async函数和Generator函数长的很像:

其实async就是Generator的语法糖,相当于给Generator封装了一下,做了一个自动执行器,我们看看async的实现原理:

我们可以发现await内部用了一个promise来包裹整个遍历过程,如果整个遍历完成了(done),那么这个promise就resolve(),并且返回最后的结果;如果中途出现了错误,那么整个promise就报错。

Thunk函数&co模块

co 模块是著名程序员 TJ Holowaychuk 于 2013 年 6 月发布的一个小工具,用于 Generator 函数的自动执行。那么它和async实现的Generator自动执行有什么差别呢?

区别就是co模块可以执行Thunk函数,Thunk函数在 柯里化,偏函数,Thunk中有介绍,是指接受cb参数的方法。

上面的代码是co模块的简化代码,大家其实可以发现和async的实现差不多,只是多了对Thunk方法的判断,我们来看看具体使用:

上面的fetchData方法接受一个url和cb参数,首先利用Thunk和ThunkToPromise将其改造,然后就可以像正常异步那样使用了。

其他文章

0
我要评论

评论

返回
×

我要评论

回复:

昵称:(昵称不超过20个字)

图片:

提交
还可以输入500个字