co模块总结

1.thunk函数

javascript中的thunk函数就是一个单参数函数,且该参数必须是一个callback函数,callback的签名必须为callback(err,args...);

所谓的thunkify就是将一个多参数函数转化为一个thunk函数,该多参数函数必须有一个callback作为参数。

2. Promsie

co模块在4.x开始使用Promise,将所有的值(常量、thunk函数等)都转化为Promise,用Promise的then完成回调,co的基本原理,还是在

promise的resolve和reject中递归的调用generator的next方法,直至generator的done为true

3. yeild

co模块的yeild后面可以跟array或object,其中的promise会并行执行

4.co的模块导出

co的模块导出代码很有代表性,值得学习

module.exports = co['default'] = co.co = co;

这种方式的好处是可以满足下面这些导入方式

var co = require('co')
var wrap = co.wrap
require('co').co
import co from 'co'
import { wrap, co } form 'co'
import * as co from 'co'

5.co.wrap

var fn = co.wrap(fn*)
将一个generator转化为一个返回promise的常规函数

co(fn*).then
将一个generator解决为一个promise

co.wrap应用于需要普通回调函数的地方,如数组的 forEach 、 reduce 等,
事件注册和Node中大多数API都需要普通的回调函数的地方

function asyncFn(num, time) {
    return new Promise(function(resolve, reject) {
        setTimeout(function() {
            resolve('data: ' + num)
        }, time)
    })
}
var res = [1, 2, 3].forEach(co.wrap(function*(item, i) {
    var d = yield asyncFn(item, i * 1000)
    console.log(d)
}))

其实并没有真正的转换,而是直接执行的co()函数,并将forEach回调的参数传递给了Generator函数。

 


参考:http://www.tuicool.com/articles/ym6b22V

转载于:https://www.cnblogs.com/mengff/p/7459272.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值