在Koa中,await next(),返回await next(),return next()和next()在中间件之间有什么区别?

问题描述 投票:0回答:1

该文档概述了在中间件中使用'await next()'的用例,导致中间件暂停并触发下一个中间件下游,直到所有中间件完成执行,此时上游级联将开始,中间件将完成执行。如果用户想要缩短级联,那么单独写“返回”将一起切断级联。

我不明白的是如果用户返回以下之一会发生什么:

const exampleMiddleware1 = async (ctx, next) => {
  return await next();

  console.log('Doing something');
};

const exampleMiddleware2 = async (ctx, next) => {
  next();

  console.log('Doing something');
};

const exampleMiddleware3 = async (ctx, next) => {
  return next();

  console.log('Doing something');
};

在第一个例子中,我认为它将暂停,触发下一个中间件,但不会完成向上级联的执行。

在第二个例子中,我认为下一个中间件将与console.log一起触发,我不认为它会在向上触发,也许?

在第三个例子中,我认为下一个中间件将被触发但它不会触发向上级联的控制台日志,与第一个示例相同。

我的想法是否正确?我正在写一个koa应用程序,想要了解更多关于它的限制,我发现这个领域我不清楚。

javascript node.js promise async-await koa
1个回答
2
投票

exampleMiddleware1和exampleMiddleware3是相同的(不需要返回await)

  • 你的console.log永远不会被调用

exampleMiddleware2

  1. 如果下一个中间件返回承诺 你的console.log将在不等待下一个中间件的情况下调用
  2. 如果下一个中间件没有返回承诺 它将完成下一个中间件然后console.log
© www.soinside.com 2019 - 2024. All rights reserved.