关于中间件执行顺序的提问
来源:4-4 自己实现koa-logger中间件,打印所有请求的耗时
泰格R
2019-03-08
const Koa = require('koa')
const app = new Koa()
function delay(){
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve()
},1000)
})
}
app.use(async (ctx, next) => {
ctx.body = '1'
next()
ctx.body += '2'
})
app.use(async (ctx, next) => {
ctx.body += '3'
await delay() //为什么这里异步执行完成后没有往下执行next(),而是执行了上面的ctx.body += 2
next()
ctx.body += '4'
})
app.use(async (ctx, next) => {
ctx.body += '5'
next()
ctx.body += '6'
})
app.listen(3000)
这段代码的中间件执行中
1.ctx.body = '1’执行后next()到下一个中间件
2.然后执行ctx.body += '3’
3.执行异步过程 await delay()
4.为什么异步过程执行后没有继续执行await delay()后面的next(),而是回到上一个中间件执行了ctx.body +='2’呢? 难道是await delay()执行完就退出了?
写回答
1回答
-
hi,因为你第一个中间件,并没有等待别的中间件结束,第一个next你加一个await试一下
就是这样
012019-03-22
相似问题