关于koa2中的async / await

时间:2018-05-17 17:15:17

标签: node.js async-await koa ecmascript-2017

我在koa2中使用async/await,如下所示

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

app.use(async (ctx, next) => {
  await next()
  console.log("1------>"+Date.now())
});

app.use(async (ctx, next) => {
  await next()
  console.log("2------>"+Date.now())
});

app.use(async (ctx, next) => {
  await next()
  console.log("3------>"+Date.now())
});

app.use(async (ctx, next) => {
  await next()
  console.log("4------>"+Date.now())
});

app.listen(3000);

运行此代码,我将获得这样的日志

4------>1526575713792
3------>1526575713794
2------>1526575713795
1------>1526575713795

这是我的问题

  1. nextapp.use(async (ctx, next)的内容是什么?是

  2. 每个await next()函数中的
  3. app.use表示wait, please run the next app.use first,如果没有下一个app.use,则忽略它,并在最后app.use中运行代码我是对的吗?

  4. 如果我将第一个app.use更改为app.use(async (ctx) => { console.log("1------>"+Date.now())});并运行它,则结果只有一个记录1------>1526576945380。我认为第二个app.use函数将继续运行,我将得到这样的结果

    1 ------> 1526576945360

    4 ------> 1526575761869

    3 ------> 1526575761869

    2 ------> 1526575761869

  5. 那么,任何人都可以帮助我吗?并为我解释?非常感谢。

1 个答案:

答案 0 :(得分:2)

  1. next是一个函数,console.log(typeof next)会向您显示。
  2. 是的,调用next将指示koa执行下一个使用例如注册的中间件。 use,并在下一个中间人解决后立即返回已解决的承诺,await前面的next代码会在那里等待,直到Promise得到解决。
  3. 为什么您希望调用use注册的下一个中间件?您无法致电next,因此终止 at此中间件。 await是一个等待Promise得到解决的js功能。 next是执行下一个中间件的koa功能。