当前位置: 首页 > 知识库问答 >
问题:

nestjs使用或不使用async/await有区别吗?

魏鸿禧
2023-03-14

我在想,这两者之间没有区别:

@Post()
saveClient(@Param() params, @Body() createClientDto: ClientDto) {
   this.clientRepository.save(createClientDto);
  }

@Post()
  async saveClient(@Param() params, @Body() createClientDto: ClientDto) {
   await this.clientRepository.save(createClientDto);
  }

但是如果没有async/await,函数将返回void,如果发生异常,我将得到以下结果:

(节点:62777)未处理的PromisejectionWarning:未处理的promise拒绝。此错误源于在没有catch块的情况下抛出异步函数的内部,或者拒绝使用未处理的promise。catch()。在未处理的promise拒绝时终止节点进程。(节点:62827)[DEP0018]弃用警告:未处理的promise拒绝已弃用。将来,未处理的promise拒绝将终止节点。具有非零退出代码的js进程。

使用async/await时,不会显示上述警告,因为函数返回promise。如果我添加了一个报税表,则相同:

@Post()
saveClient(@Param() params, @Body() createClientDto: ClientDto) {
   return this.clientRepository.save(createClientDto);
  }

所以我有点担心:一个简单的缺失返回可能会终止我的nestjs过程?

谢谢

共有1个答案

阴福
2023-03-14

尝试用try/catch

@Post()
  async saveClient(@Param() params, @Body() createClientDto: ClientDto) {
    try {
       await this.clientRepository.save(createClientDto);
    } catch(err) {
       console.log(err);
    }
  }
 类似资料:
  • 问题内容: 我已经在移动应用程序和Web应用程序中使用了ECMAScript 6 和ECMAScript 7功能(由于Babel)。 第一步显然是达到ECMAScript 6级别。我学习了许多异步模式,promise(确实是很有希望的),生成器(不确定为什么使用*符号)等。其中,promise非常适合我的目的。而且我已经在我的应用程序中使用它们很多次了。 这是我如何实现基本诺言的示例/伪代码- 随

  • 问题内容: 我已经在移动应用程序和Web应用程序中使用过ECMAScript 6 和ECMAScript 7功能(由于Babel)。 第一步显然是达到ECMAScript 6级别。我学习了许多异步模式,promise(确实是很有希望的),生成器(不确定为什么使用*符号)等。其中,promise非常适合我的目的。而且我已经在我的应用程序中使用它们很多次了。 这是我如何实现基本诺言的示例/伪代码- 随

  • 编辑:在测试用例5中,任务似乎处于状态。 我在.NET 4.5中使用System.net.http.HttpClient时遇到了一些奇怪的行为--其中“等待”调用的结果(例如)将永远不会返回。 只有在使用新的Async/Await语言功能和任务API的特定情况下才会出现这种情况--代码似乎总是在只使用延续时工作。

  • 我有一个安装了ReactJS的NetCore2应用程序。 null VS代码抛出一个错误,告诉我异步只适用于。ts文件。另外,如果我在任何其他函数中使用await,我将得到一个错误,比如。 据我所知,async/await不仅仅是TS...(或者我错了?)。 谢了!

  • 问题内容: 我正在尝试为Node v6.9.2配置Babel。我想使用/ 构造。 因为我是Babel和所有Node基础架构的新手,所以我对如何正确配置它感到困惑: 我应该使用什么预设?ES6的大多数功能已经实现了Node。因此,出于性能原因,我不希望Babel移植Node 6.9.x已经支持的功能(箭头功能,新的导入机制等)。 我应该包括哪些插件,以便可以使用异步/等待?我也感到困惑,因为经过一番

  • 快速上手理解 先复制以下这段代码,在粘贴在chrome的控制台console中,按回车键执行 function getSyncTime() { return new Promise((resolve, reject) => { try { let startTime = new Date().getTime() setTimeout(() => {