关于 koa2 中的 async/await

About async/await in koa2

我在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. app.use(async (ctx, next)中的next是什么函数?

  2. 每个app.use函数中的
  3. await next()表示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函数会继续运行ning,我会得到这样的结果

    1------>1526576945360

    4------>1526575761869

    3------>1526575761869

    2------>1526575761869

那么,有人可以帮助我吗?并为我解释?非常感谢。

  1. 是的 next 是一个函数,console.log(typeof next) 会向您展示。
  2. 是的,调用 next 将指示 koa 执行使用例如注册的下一个中间件。 use 和 returns 下一个中间件解析后立即解析的 Promise,awaitnext 前面,您的代码将在那里等待,直到 Promise 完成已解决。
  3. 为什么您期望调用 use 注册的下一个中间件?你不调用 next 所以你 terminate 在这个中间件中。 await 是一个等待 Promise 被解析的 js 函数。 next 是执行下一个中间件的 koa 功能。