我开始学习koa.js,在koa文档中我找到了这样的演示代码:
const Koa = require('koa');
const app = new Koa();
app.use(async ctx => {
ctx.body = 'Hello World';
});
app.listen(3000);
此中间件使用异步功能,但代码是同步的。这是否需要在koa的任何地方使用异步功能或者有特定的情况呢?
答案 0 :(得分:1)
你也可以使用同步功能,它可以很好地工作。
异步函数可以被同步函数替换为将 Promise 返回到 sync 函数(有关详细信息,请参阅http://2ality.com/2016/10/async-function-tips.html)
Koa正在使用koa-compose来处理中间件。
如果您检查撰写功能 https://github.com/koajs/compose/blob/master/index.js
代码是
return Promise.resolve(fn(context, function next () {
return dispatch(i + 1);
}))
然后将您的中间件函数fn
绑定到Promise.resolve
,这意味着即使您返回非Promise,输出也将被视为Promise。
它没有在任何地方记录,并建议你避免使用未记录的模式,我会这样做:
app.use(function(context){
// ...
return Promise.resolve();
})
兼容异步的同步设计。