【问题标题】:Javascript switch case falling through to default even with 'break'即使使用“break”,Javascript switch case 也会变为默认值
【发布时间】:2018-01-20 15:49:44
【问题描述】:

我正在设置一个 node.js discord 机器人,它使用 firebase 来存储用户的状态。我设置了一个 switch 语句来执行每个命令,到目前为止它运行良好。默认情况是这样的:

default:
    message.reply("Unknown command type \"" + prefix + "help\" for a list of commands.")

但是,在实施 firebase 之后,我遇到了一个非常不寻常的错误。下面是用“!check”检查其他用户状态的代码

case "check":
    firebase.database().ref('/users/' + msg.replace("!check ", "")).once('value').then(function(snapshot) {
        const status = snapshot.val().tagline;
        message.reply(message.author.username + "'s status is: " + status);
    });
    break; // <-- Break that isn't working

然而,当代码工作时,默认情况也会执行,如下所示。

我认为这可能与从 firebase 检索用户状态的延迟有关。默认情况首先出现的事实是一个很好的迹象。虽然我很困惑为什么延迟会导致休息被忽略。

【问题讨论】:

  • 所以你的意思是它总是在默认开关情况下进行?
  • @ManishKumawat 所有其他情况正常运行,只有这种情况(“检查”情况)属于默认情况。
  • 默认和检查的顺序是什么?先写哪个?
  • 这里有什么是无法判断的。我的猜测是您的带有未显示 switch 语句的代码被调用了两次。 switch 语句不会在你中断时失败。
  • @JasonGoemaat 你是对的,检查以确保不读取机器人自己的 cmets 的代码失败了。感谢您帮助查找故障

标签: javascript node.js firebase firebase-realtime-database switch-statement


【解决方案1】:

在我的例子中,switch 语句被调用了两次。如果机器人正在读取它自己的消息,则返回的代码失败。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    • 2020-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多