zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    升级visual studio 2010中的jquery1.4.2
    windows 自动登录
    clipse3.2/3.3中指定第三方包(JAR)和类路径(CLASSPATH)的几个方法(转做笔记)
    MyEclips 配置文章集合
    JNDI全攻略(二)
    JNDI全攻略(一)
    Eclipse中webinf和metainf文件夹的信息
    MYECLIPSE7.5中安装SVN几步轻松实现
    天风网上商店系统 Beta (源码)
    SQL server 2005中无法新建作业(Job)的问题
  • 原文地址:https://www.cnblogs.com/mengff/p/7459272.html
Copyright © 2011-2022 走看看