关于中间件执行顺序的提问

来源: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回答

慕瓜8449030

2019-03-20

hi,因为你第一个中间件,并没有等待别的中间件结束,第一个next你加一个await试一下


就是这样




//img.mukewang.com/szimg/5c91ec600001dd1e08920342.jpg



0
1
泰格R
非常感谢!
2019-03-22
共1条回复

mpvue课程小程序全栈开发

慕课网独家首发 学习mpvue+Koa+vue 全栈开发小程序

1407 学习 · 1331 问题

查看课程