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 语句返回不会停止执行的主要内容,如果未能解决你的问题,请参考以下文章
带有承诺的 MongoDB 查询不执行 if 语句(MongoDB node.js 驱动程序)
Java finally语句到底是在return之前还是之后执行