【问题标题】:Node.js catch statement return does not stop executingNode.js catch 语句返回不会停止执行
【发布时间】: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 语句?

【问题讨论】:

    标签: javascript node.js discord.js


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-02
      • 2015-04-24
      • 1970-01-01
      • 2019-08-12
      • 1970-01-01
      • 2014-10-02
      相关资源
      最近更新 更多