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

时间:2018-01-18 10:10:46

标签: javascript reactjs switch-statement return eslint

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

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

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

我有一个问题,即内部default语句中的switch子句被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;
        }
    }
}

2 个答案:

答案 0 :(得分: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;
            }
        }
    }

答案 1 :(得分:0)

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

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