function* 是个什么啊?
发布于 10 年前 作者 yihaodian 10681 次浏览 最后一次编辑是 8 年前

这两天在研究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);

2 回复

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 文档的地址写错了, 多了一个逗号.

回到顶部