繁体   English   中英

Javascript - 错误处理停止代码

[英]Javascript - error handling stopping code

快速的基本问题,

我正在使用 discord.js v13 设置guildmember.timout ,我正在尝试在这里正确使用.catch。 出于某种原因,如果代码抛出错误,我无法弄清楚如何结束。

      muteMember
        .timeout(time, reason)
        .catch((error) => {
          return errors(client, message, args, "mute", error, true);
        });

      muteMember.send ... 

目前它将运行错误 function 然后继续执行.catch 之后的代码,例如muteMember.send 在运行.catch 内部的内容后让它“停止”的最佳方法是什么? 先感谢您

您可以将 async-await 与 try-catch 一起使用:

 async function myFunction() { try { await muteMember.timeout(time, reason) // throws an error if it fails -- jumps to the catch block muteMember.send... } catch(error) { errorcheck = true errors(client, message, args, "mute", error, true); // and whatever other error handling you would like } }

return语句仅从#catch回调中返回。 使用#then回调处理 promise,这就是您希望代码在成功时运行的位置。

muteMember
    .timeout(time, reason)
    .catch((error) => {
        //error
        errorcheck = true
        return errors(client, message, args, "mute", error, true);
    })
    .then(() => {
        //success
    })

muteMember.timeout() 返回Promise ,因此您想要在 promise 解析后运行的任何代码都应该包含在 then() 块中:

muteMember
        .timeout(time, reason)
        .then((member) => {
          // code that depends on successfully timing out a member
          muteMember.send....
        })
        .catch((error) => {
          // only runs if there's an error
          errorcheck = true
          return errors(client, message, args, "mute", error, true);
        });

您还可以使用更现代、更易读的async/await语法:

const myAsyncFunction = async () => {
  try {
    const member = await muteMember.timeout(time, reason);
    // code that depends on successfully timing out a member
    muteMember.send....
  } catch (error) {  
    // only runs if there's an error
    errorcheck = true
    return errors(client, message, args, "mute", error, true);
  }
}
    

如果错误发生,你可以让它返回一个 falsy,然后检查它是否是 falsy,如果是则返回。

let isModified = await muteMember
        .timeout(time, reason)
        .catch((error) => {
            errors(client, message, args, "mute", error, true)
            return false;
        })
if (!isModified) return;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM