为什么ES6 Generators更适合函数调用?

时间:2014-01-22 19:45:13

标签: generator ecmascript-harmony koa

我仍然对ES6发电机的一些优点感到困惑。怎么做,

app.use(function *(next){
  var start = new Date;
  yield next;
  var ms = new Date - start;
  this.set('X-Response-Time', ms + 'ms');
});

比较类似的东西,

app.use(function (next, ctx) {
  var start = new Date;
  next(ctx);
  var ms = new Date - start;
  ctx.set('X-Response-Time', ms + 'ms');
});

是什么让发电机对像Koa这样的东西如此特别?这就是Koa.js对发电机的看法,

  

对比Connect的实现只是简单地通过一系列函数传递控制直到一个函数返回,Koa产生“下游”,然后控制流回“上游”。

这不是我上面的伪代码吗?

1 个答案:

答案 0 :(得分:3)

next将成为常规功能。由于所有中间件都被认为是异步的,next(ctx)不会等到所有下游中间件都完成处理。相反,你实际拥有的是Express,它没有“上游”的概念。

你实际上是:

app.use(function (downstream) {
  var start = Date.now();
  setImmediate(downstream);
  var ms = Date.now() - start;
  this.set('X-Response-Time', ms + 'ms');
})

由于您在相同的时间点设置响应时间,而不是所有下游中间件实际上都已完成执行,因此无效。