You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NestJS控制器方法返回Promise时是否必须声明为async?

关于NestJS控制器方法是否需要声明为async的问题

你的理解完全正确!

先看你给出的代码示例:

@Controller('something') 
class SomeController { 
  @Get() 
  foobar() { 
    return foo() // this returns a promise 
  } 
}

这里确实不需要把foobar()声明为async,原因很简单:NestJS的底层会自动识别控制器方法的返回值类型,如果返回的是一个Promise,框架会自动等待这个Promise解析完成,再把最终结果响应给客户端,完全不需要你额外做什么。

只有一种情况必须给方法加上async关键字:当你需要在方法内部使用await来处理异步逻辑的时候。比如如果你的业务需要顺序执行多个异步操作,或者要等待某个Promise的结果再进行下一步,这时候就必须用async来标记方法,才能合法使用await关键字。举个实际例子:

@Get()
async foobar() {
  // 必须用async才能在这里使用await
  const fooResult = await foo();
  // 基于foo的结果调用另一个异步方法
  return await bar(fooResult);
}

总结一下:返回Promise本身不需要async修饰,但要在方法内部用await处理异步逻辑时,必须把方法声明为async。你的判断完全准确~

内容的提问来源于stack exchange,提问作者user2297996

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 15:47:40