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的过程。

时间: 2024-10-06 11:52:57

thunkify和co的邂逅的相关文章

邂逅Sass和Compass之Compass篇

本文主要讲解Compass的内容,众所周知Compass是Sass的工具库,如果对Sass不甚了解的同学可以移步 邂逅Sass和Compass之Sass篇 Sass本身只是一个"CSS预处理器",Compass在它的基础上,封装了一系列的模块和模板,补充了Sass的功能. 1.Compass的安装 和Sass一样,Compass也是用Ruby语言开发的,所以在安装Sass之前必须先安装Ruby,安装Ruby的过程就不再赘述,安装好Ruby后可以直接在命令行输入下面的命令 sudo ge

HDU - 2897 - 邂逅明下

先上题目: 邂逅明下 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2474    Accepted Submission(s): 1141 Problem Description 当日遇到月,于是有了明.当我遇到了你,便成了侣.那天,日月相会,我见到了你.而且,大地失去了光辉,你我是否成侣?这注定是个凄美的故事.(以上是废话)小t和所

hdu 2987 邂逅明下

巴什博弈的变形:假设先取者为A,后取者为B,初始状态下有石子n个,除最后一次外其他每次取得石子个数必须在[p,q]之间. 若当前石子共有n =(p+q)* r个,则A必胜,必胜策略为:A第一次取q个,以后每次若B取K个,A取(p+q-k)个,如此下去最后必剩下p个给B,所以A必胜. 若n =(p+q)* r + left个(1< left <= p)B必胜,必胜策略为:每次取石子活动中,若A取k个,则B去(p+q-k)个,那么最后剩下left个给A,此时left <= p,所以A只能一次

程序员的奋斗史(三十九)——大学断代史(三)——我和知乎邂逅

遥望2011年的某个惶惶岁月,那是我与知乎相识的日子. 排除知乎网站的内测用户,我应该算得上第一批用户.那时知乎网还未开放注册,只能通过好友邀请注册,我费了九牛二虎之力,申请了好几次,才拥有了知乎账号.作为一个真实的问答社区,从近几年的运营来看,知乎是成功的.虽然外界曾质疑知乎网站的盈利模式,但不可否认知乎是伟大的. 众所周知,知乎的原型是国外的Quora.以前一直以为Quora是多么的神圣,直到今年注册并使用后,才发觉知乎在用户体验上一点不逊色于Quora.好的网站当如知乎,简洁美观.操作简便

邂逅DNS故障

邂逅DNS故障 对于本文最后所提出的问题答案,大家可以在<Unix/Linux网络日志分析与流量监控>一书的第四章找到.

Java与REST的邂逅之Jersey

Java 与 REST 的邂逅(一)浅谈 Jersey 及 JAX-RS 简介 在Web的世界中,Java从最早的Servlet/JSP,发展到JSTL/JSF,而third party也有action-based的Struts及Spring MVC,或component-based的GWT, ZK等,事实上Java的Web世界已经非常的成熟.然而这些架构主要设计是以Web Application为主要要求,但是Web的世界中还有另外一个常见的应用是Web Services. 设计Web Ser

多少次邂逅才遇见你

多少次的不期而遇才能收获一辈子的幸福,而我们只是一次不浪漫的邂逅却让我陷入了无尽的相思中.不,不能说是邂逅吧,只能说是一面之缘.但在茫茫人海,在不确定的时间,不确定的地点,在未知未来的长河里,我遇见你,是人生最美丽的意外. 一直很喜欢这样一句话:向来情深,奈何缘浅,却不悔相思.一见钟情是我对你,一见不钟情是你对我.情窦初开的自己在一次错的时间错的地点遇到了你,我不曾想过,之后你会一直出现在我梦里.在看到你的那刻,我知道了什么叫心动,当那个白衣少年出现在我的面前时,我知道,我已经不是曾经那个不谙世

HDU 2897 邂逅明下 (经典博弈变形)

邂逅明下 Problem Description 当日遇到月,于是有了明.当我遇到了你,便成了侣. 那天,日月相会,我见到了你.而且,大地失去了光辉,你我是否成侣?这注定是个凄美的故事.(以上是废话) 小t和所有世俗的人们一样,期待那百年难遇的日食.驻足街头看天,看日月渐渐走近,小t的脖子那个酸呀(他坚持这个姿势已经有半个多小时啦).他低下仰起的头,环顾四周.忽然发现身边竟站着位漂亮的mm.天渐渐暗下,这mm在这街头竟然如此耀眼,她是天使吗?站着小t身边的天使. 小t对mm惊呼:"缘分呐~~&q

126平温馨简约 邂逅美的家:装修公司:家庭装修:装饰公司:品牌装饰公司

126平温馨简约 邂逅美的家 设计师石吉祥   电话15127722651 业主:独立设计一直不在我们的考虑范围内,就怕不是同一公司的设计和施工在后期的沟通上会有问题.最后决定去罗澜装饰看看完全是因为设计风格和热情可爱的设计师~哈哈,当然啦~罗澜装饰的设计费也是一度让我们相当矛盾.可是约谈后,真心觉得那是一个认真贴心的设计师.当下就决定拍板罗澜装饰了!交完定金后直接量房!(之前磨磨蹭蹭犹豫来犹豫去的我们这次决定的尤其快!) 至于装修风格,其实最初想的是现代简约,后来被设计师的几个作品迷住了,想说