引题:阅读async 函数使用中有说明async 的优势
1、async 有更好的语意化。
2、更广泛的使用性,即co模块约定yield 只能是 thunk函数或者Promise对象。而async 可以是对象或者原始类型值。
3、async 返回的是Promise
接下来解释thunk 函数。
Thunk 函数
Thunk 函数的起源在于 参数求值策略
就是函数的参数在什么时间开始求值
fun(x+5) x+5 在什么时间的时候求值
方式1 传值调用 【有可能存在没有使用的情况】
方式2 传名调用
那么什么叫chunk
因为js 是求值调用的,因此产生的chunk函数,即将求值的中间过程集成在函数中,
举个例子 fun(x+5)就为 fun(chunk) function thunk(x){return x+5}
他是传名调用的一种婉约实现,使用函数来代替一个“表达式”。
在 JavaScript 语言中,Thunk 函数替换的不是表达式,而是多参数函数,将其替换成单参数的版本,且只接受回调函数作为参数。
本意是将数据和回调分开。
多参函数 和函数的柯里化有区别
- 函数接受多个参数。
- 函数的最后一位是回调函数!。
根据 thunk 的理念我们将执行函数和回调函数分开以后,代码清晰了许多
把所有的执行函数放入generator函数里面,利用generator函数的yield对执行函数的流程控制再把函数执行权移出函数到对应的回调函数,获取数据后再把数据返回来。
还是以ajax请求为例
纯粹的thunk 是没有什么大的用处的。
我们利用 thunk 将 执行 与 回调 拆分开 从而变成执行函数放在一起 回调函数放在一起, 并且使用 yield 将两者进行连接