这两天在研究koa框架(可以参见http://koa.rednode.cn/ ), 但是里面的函数名好多都是*,运行的时候根本跑步起来。。
文档有有这样一段: 与普通的 function 不同,generator functions 以 function* 声明。以这种关键词声明的函数支持 yield
是我的方法不对嘛?
下面是文档中的代码。。。
var koa = require(‘koa’); var app = koa();
// x-response-time
app.use(function *(next){ var start = new Date; yield next; var ms = new Date - start; this.set(‘X-Response-Time’, ms + ‘ms’); });
// logger
app.use(function *(next){ var start = new Date; yield next; var ms = new Date - start; console.log(’%s %s - %s’, this.method, this.url, ms); });
// response
app.use(function *(){ this.body = ‘Hello World’; });
app.listen(3000);
function *() {} 是 es6 中的 generatorFunction,node 应该是从 0.11.3开始支持。 因此在低于这个版本的 node 中是不能运行的。
至于 generatorFunction, generator, yield,可以看看 generator详解 by @尤小右
generator是最新的ES6特性, 可以实现暂停generator内部代码执行, 但不影响 外部代码. 具体可以参看这里 http://n.thepana.com/2014/01/02/generator/
除了generator, ES6还有许多新特性, 非常cool 可以研究下.
TJ大神使用这个特性开发了 co 库, 可以实现 线性代码, 异步操作, 非常厉害, koa是在co基础之上开发的新的 web框架, 其定位同connect是类似的.
顺便说下 koa 文档的地址写错了, 多了一个逗号.