【问题标题】:Switch Statement default return "Unreachable" according to ESLint根据 ESLint,Switch 语句默认返回“Unreachable”
【发布时间】:2018-01-18 10:10:45
【问题描述】:

我有一个函数,它根据内容创建者提供的一些 url 和用户设备的 userAgent 确定按钮(锚标记)的 url。

在这个函数中,我有两个 switch 语句。我首先检查内容创建者选择用于按钮的链接类型(网址或 App Store 链接)

如果内容创建者指定了 App Store 链接,他们还会为多个平台提供一系列 url。他们不一定会为每个平台提供链接,所以我们有一个 web url 的后备,这也是由创建者设置的,或者由后端提供(它基本上可以找到的第一个 url)

我有一个问题,即内部 switch 语句中的 default 子句被 ESLint 标记为 Unreachable code

ESLint 错了吗?或者有什么我可以做得更好的吗?

function getButtonLink() {
    switch(this.props.linkType) {
        case 0: {  // appStore link, get the best-fit appstore link for device
            switch(this.detectUserAgent()) {
                case 1: {
                    return this.setButtonUrlProp('windows');
                }
                case 2: {
                    return this.setButtonUrlProp('android'); 
                }
                case 3: {
                    return this.setButtonUrlProp('ios');
                }
                case 4: {
                    return this.setButtonUrlProp('amazon'); 
                }
                default: {
                    return this.setButtonUrlProp('web');
                }
            }
        }
        case 1:   // web link
        default: {
            return this.props.button.urls.web;
        }
    }
}

【问题讨论】:

  • ESLint 没有向我显示此警告。您确定这不是由其他原因引起的,例如 detectUserAgent() 从不返回不是 1、2、3 或 4 的值吗?无论如何,我都会重构代码,以便外部条件使用其他内容,例如 if - else,因为嵌套的 switch 语句可能难以一目了然。
  • 修复了它。 detectUserAgent 总是返回一个值。您介意将您的评论升级为答案吗?
  • 像@GorkaHernandez 我也没有看到错误。我用eslint.org/demo检查。

标签: javascript reactjs switch-statement return eslint


【解决方案1】:

怎么样:

    function getButtonLink() {
        switch(this.props.linkType) {
            case 0: // appStore link, get the best-fit appstore link for device
                var agents = ["web", "windows", "android", "ios", "amazon"];
                return this.setButtonUrlProp(
                    agents[this.detectUserAgent()] || agents[0]
                );
            }
            case 1: // web link
            default: {
                return this.props.button.urls.web;
            }
        }
    }

【讨论】:

  • 嗨!欢迎来到堆栈溢出。请edit您的回答解释您的代码如何以及为什么工作。
【解决方案2】:

ESLint 没有向我显示此警告。确保错误不是由其他原因引起的,例如 detectUserAgent() 从不返回不是 1、2、3 或 4 的值?

无论如何,我都会重构代码,以便外部条件使用其他内容,例如 if - else,因为嵌套的 switch 语句可能难以一目了然。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-25
    • 2015-05-02
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    • 2016-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多