我在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
这是我的问题
next
中app.use(async (ctx, next)
的内容是什么?是
await next()
函数中的 app.use
表示wait, please run the next app.use first
,如果没有下一个app.use
,则忽略它,并在最后app.use
中运行代码我是对的吗?
如果我将第一个app.use
更改为app.use(async (ctx) => { console.log("1------>"+Date.now())});
并运行它,则结果只有一个记录1------>1526576945380
。我认为第二个app.use
函数将继续运行,我将得到这样的结果
1 ------> 1526576945360
4 ------> 1526575761869
3 ------> 1526575761869
2 ------> 1526575761869
那么,任何人都可以帮助我吗?并为我解释?非常感谢。
答案 0 :(得分:2)
next
是一个函数,console.log(typeof next)
会向您显示。next
将指示koa执行下一个使用例如注册的中间件。 use
,并在下一个中间人解决后立即返回已解决的承诺,await
前面的next
代码会在那里等待,直到Promise得到解决。use
注册的下一个中间件?您无法致电next
,因此终止 at此中间件。 await
是一个等待Promise得到解决的js功能。 next
是执行下一个中间件的koa功能。