koa,yield与co库

目前我最欣赏的程序员是express的作者TJ。

最近准备用node js重写这个网站,发现TJ的新作koa似乎已经到了很使用的阶段,花了两小时研究了下。

刚开始看得是一头雾水。为什么koa demo 里的yield的用法和mdn的说法完全不同,为什么yeild这么特殊,这玩意到底什么鬼。

慢慢的理清了思路,找到了对的思路,才明白了过来。

不得不说,直介绍是什么,不说干什么用的文章到底有什么用……

首先,ES 6里引入了generator的概念.

通过代星号的函数可以常见生成器(特殊类)。

  1. 生成器上,有一段业务代码,
  2. 可以通过生成器生成函数(实例化类),调用可以执行生成器中的业务代码。
  3. 生成器中的代码依然不能执行异步代码,遇到 yield会中断
  4. 本身这一切不怎么神奇,但TJ大神写了个神奇的库叫CO。CO库可以直接调用生成器,执行业务代码。业务代码的yield只要跟的参数是promise或者thunk包装的异步函数,就能在异步结束后在异步代码中继续执行下面的代码,甚至可以有返回值。
  5. 这样,配合特殊格式的异步函数,把yield在结构上当成了类似call方法的同步函数。整个业务代码可以和同步代码一样有极强的可读性。异步代码尽可能简化,可以用其他库打包。
  6. 最后,代码看着像函数化的同步代码,用着也像。
koa其实就是个基于CO重构的express。
 
其实每个做过Node js的程序员,或多或少的都会写过一些类似的流程控制代码。当然,无疑TJ是写的最好的,考虑的最多,用的最广泛。
 
我真是爱死了这个设计出生的程序员了。

关于co可以参考 http://web.jobbole.com/85901/

发布于
2016-11-17