Node.js catch 语句返回不会停止执行

Posted

技术标签:

【中文标题】Node.js catch 语句返回不会停止执行【英文标题】:Node.js catch statement return does not stop executing 【发布时间】:2022-01-24 03:37:14 【问题描述】:

我正在尝试在 node.js 的帮助下创建一个不和谐的机器人 我需要调用一个可能返回不和谐 API 错误的函数,我会像这样处理它们

interaction.user.send("Hi")
.catch(() => return interaction.reply("...");
console.log("shouldnt run if an error accured")

但是,每当 API 错误导致返回语句与通常情况不同时,它不会停止代码执行。 当异常发生时,如何停止执行此代码中的 console.log 语句?

【问题讨论】:

【参考方案1】:

js 是异步的,因此它将 API 的请求放入执行队列(不等待 api 的响应)并继续执行,这就是即使发生错误,您的控制台语句也会运行的原因。

interaction.user.send("Hi")
.then(() => 
// do whatever you want when it succeed
)
.catch((error) =>  
// handle error
 );

您也可以签出异步等待。

【讨论】:

请不要只写代码的答案,你应该解释 OP 做错了什么,你改变了什么以及它是如何工作的 我试过了,遗憾的是由于某种原因它没有用,最后你还需要关闭) 我已经更新了答案,以便您可以处理发送消息成功和失败时的处理方式。 我在答案中添加了更多描述。【参考方案2】:

正如@ParthPatel 所指出的,interation.user.send() 正在返回一个Promise,它可能不会在出错时立即被拒绝。诸如 console.log() 之类的语句将在错误有机会发生并被捕获之前运行。

不过,现在您可以使用 async await 语法,这可以帮助您稍微简化代码,具体取决于您要执行的操作。

try 
  await interaction.user.send("Hi");
  console.log('Shouldn\'t run if error occurred.');
 catch(e) 
  interaction.reply('...');

请注意,您只能在 async 函数内使用 await,声明如下:

async function doSomething() 
  // Do something here...

您可以在这里找到更多信息:https://developer.mozilla.org/en-US/docs/Learn/javascript/Asynchronous/Async_await

【讨论】:

以上是关于Node.js catch 语句返回不会停止执行的主要内容,如果未能解决你的问题,请参考以下文章

node.js,捕捉错误所以脚本不会中断?

带有承诺的 MongoDB 查询不执行 if 语句(MongoDB node.js 驱动程序)

Java finally语句到底是在return之前还是之后执行

Try中如果发现错误,即跳出try去匹配catch,那么try后面的语句就不会被执行

try-catch()-finally讲解

java异常中try或catch语句中可以有return语句吗?如有return会执行finall