【发布时间】:2017-08-12 15:32:51
【问题描述】:
我一直在阅读Koa.js documentation,这似乎是一个非常酷的小平台,我想了解更多关于异步/等待和其他好东西的信息。
看起来我不太了解生成器在新 JS 中的作用。我不断遇到这样的例子:
// Using .is()
const minify = require('html-minifier');
app.use(function * minifyHTML(next) {
yield next;
if (!ctx.response.is('html')) return;
let body = ctx.body;
if (!body || body.pipe) return;
if (Buffer.isBuffer(body)) body = body.toString();
ctx.body = minify(body);
});
// Streams
app.use(function * (next) {
ctx.body = someHTTPStream.on('error', ctx.onerror).pipe(PassThrough());
});
在这里使用生成器的目的是什么?我不得不承认我了解它们的工作原理,但绝对看不到这里的实用程序。它们是 async/await 工作所必需的吗?
为什么不是上面的例子:
app.use(function(next) {
ctx.body = 'Hello World';
});
甚至他们的 Hello World 应用程序也不这样做:
app.use(ctx => {
ctx.body = 'Hello World';
});
【问题讨论】:
-
Koa 没有使用
async/await,它仍然被生成器卡住(但出于相同目的使用它们) -
Koa 手动运行生成器,使
yield的使用类似于await原生的行为
标签: javascript express ecmascript-6 async-await koa