是否需要在koa框架中使用异步函数?

时间:2018-04-01 08:44:36

标签: node.js async-await koa koa2

我开始学习koa.js,在koa文档中我找到了这样的演示代码:

const Koa = require('koa');
const app = new Koa();

app.use(async ctx => {
  ctx.body = 'Hello World';
});

app.listen(3000);

此中间件使用异步功能,但代码是同步的。这是否需要在koa的任何地方使用异步功能或者有特定的情况呢?

1 个答案:

答案 0 :(得分:1)

简答:

你也可以使用同步功能,它可以很好地工作。

答案很长:

Promise vs async

异步函数可以被同步函数替换为将 Promise 返回到 sync 函数(有关详细信息,请参阅http://2ality.com/2016/10/async-function-tips.html

Koa撰写

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();
 })

兼容异步的同步设计。