koa 中间件next加上await 与不加await 的差别,请教大佬

发布于 2022-09-12 14:02:13 字数 954 浏览 27 评论 0

app.use((ctx, next) => {

if (ctx.path.indexOf('favicon') > -1) {
    return;
}
console.log(3)

ctx.body = 'hellow'
next() // 注意这个中间件没有 async/await,如果加上await 就是我理解的那个样子
// return;
ctx.body += 'haha'
console.log(4)

});
// 响应时间统计中间件
app.use(async(ctx, next) => {

console.log(2)

// ctx.set('Content-Type', 'text/html')
await next()
console.log(5)

});
// 响应
app.use(async(ctx, next) => {

console.log(1)

ctx.body = 'zjp'
// console.log(ctx)
await next()
console.log(7, ctx.body)
ctx.body += 'ctt'
console.log(6)

    // next()

});

控制台运行结果:
image.png
浏览器返回结果:
image.png

疑问:
为什么这句代码没有执行`
ctx.body += 'ctt'

期待结果:zjphahactt,为什么返回的是zjphaha,没有ctt呢?如果第一个中间件加上async/await 的话就是期待的结果,

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

靖瑶 2022-09-19 14:02:13

看了koa,和compose源码才明白,koa源码中有个方法respond中,结合宏任务微任务执行顺序....最终就是这句话
if ('string' == typeof body) {

return res.end(body);

}

我不咬妳我踢妳 2022-09-19 14:02:13

await 就是等待的意思,加上之后等这一句执行出结果后才往下执行. 一般后面跟着时http请求,目的就是等http响应之后再往下执行.

何必那么矫情 2022-09-19 14:02:13

为什么我测试的结果是zjphahactt image.png , koa@2.13.1版本 ..

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文