zoukankan      html  css  js  c++  java
  • thunkify和co的邂逅

    上一篇说到thunkify的作用,这一篇说一下thunkify和co的集合

    co中有一块代码

    /**
     * Convert a thunk to a promise.
     *
     * @param {Function}
     * @return {Promise}
     * @api private
     */
    
    function thunkToPromise(fn) {
      var ctx = this;
      return new Promise(function (resolve, reject) {
        fn.call(ctx, function (err, res) {
          if (err) return reject(err);
          if (arguments.length > 2) res = slice.call(arguments, 1);
          resolve(res);
        });
      });
    }

    当你使用thunkify来处理一个带有callback的函数时候,co期待你处理后的函数上一个只接受一个callback的函数

    譬如var thunkFunc = thunkify(function(a,b,c,callback){})(a,b,c)这样的

    在如果是在koa中的话,可以直接使用yield thunkFunc来执行该函数。

    co检测到你的迭代器返回的是一个function,就会调用自己的thunkToPromise(thunkFunc)来执行,在该函数中,该方法被包装成一个promse并执行,在执行的时候被放入了一个callback,该callback带有两个参数err和res,当执行完后调用promise的resolve方法返回callback中的res(co值想让你的callback有两个参数)。co+thunkify来完成函数的调用,省去了自己添加callback的过程。

  • 相关阅读:
    flare3d_plane
    flare3d_TextureFilter
    flare3d_animation
    flare3d黄色星球案例再次解读整理
    pureMVC(二)
    flare3d_ColladaLoader
    flare3d_clone
    四则运算
    15章
    带界面的四则运算
  • 原文地址:https://www.cnblogs.com/wofeiwofei/p/5462387.html
Copyright © 2011-2022 走看看