繁体   English   中英

根据ESLint,Switch语句默认返回“ Unreachable”

[英]Switch Statement default return “Unreachable” according to ESLint

我有一个功能,它可以根据内容创建者提供的某些URL和用户设备的userAgent确定按钮的URL(锚标记)。

在此功能中,我有两个switch语句。 我首先检查一下内容创建者为按钮选择的链接类型(Web URL或App Store链接)

如果内容创建者指定了App Store链接,则他们还将为多个平台提供一系列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;
        }
    }
}

怎么样:

    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;
            }
        }
    }

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

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

暂无
暂无

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

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