在switch语句中使用break时出现无法访问的代码错误

时间:2016-08-21 05:04:35

标签: javascript redux

我想知道我在代码中做错了什么。我正在尝试执行以下操作:

switch (action.type) {
    case TYPES.ADD_TO_FAVORITES:
      if (state.faves.length <= 10) {
        return assign({}, state, {
          faves: state.faves.concat(action.payload),
          full: false
        });
      } else {
        return assign({}, state, {
          faves: state.faves,
          full: true
        });
      }
    default:
      return state;
  }

我的linter说在default案例之前添加休息时间,但当我这样做时,它会显示unreachable code

4 个答案:

答案 0 :(得分:3)

return将充当break。没有必要同时使用两者。如果您收到的消息是您有无法访问的代码,那么它就没有任何意义,或者您之前执行的操作在逻辑上是无序的。

答案 1 :(得分:3)

linter规则,即“no-fallthrough”&#39;在所有情况下,不允许任何意外的堕落。

没有中断代码执行的含义将从匹配大小写继续到下一个大小写,除非遇到break,return等。

有时候我们确实需要这个,但是可能会发生无意的挫折,而这条规则试图阻止这种情况发生。

您可以禁用该规则或将其配置为警告。 我建议为返回值指定一个变量,并在函数结束时返回它而不禁用该规则。

window.Pulse =
  Models: {}
  Collections: {}
  Routers: {}
  Views: {}
  init: -> 
    Pulse.mainRouter = new Pulse.Routers.MainRouter()
    Backbone.history.start()

$ -> Pulse.init()

}

对于无法访问的部分,您将从if else块返回。

所以休息永远不会有机会执行。

答案 2 :(得分:0)

switch (action.type) {
case TYPES.ADD_TO_FAVORITES:
  if (state.faves.length <= 10) {
    return ...;
  } else {
    return ...;
  }
  break; // YOU HAVE ADDED BREAK HERE
default:
  return state;
}

case TYPES.ADD_TO_FAVORITES内,ifelse将被执行。正如在{和else中都返回了一些对象一样,break之前添加的default将永远不会被执行!

这就是它说unreachable code的原因。

答案 3 :(得分:-1)

切换声明中

返回 使无意义不允许。您只能在功能返回。如果你想从switch语句中获取值。只需将它分配给像这样的变量

var result;
switch (action.type) {
    case TYPES.ADD_TO_FAVORITES:
        if (state.faves.length <= 10) {
            result = assign({}, state, {
                faves: state.faves.concat(action.payload),
                full: false
            });
        } else {
            result = assign({}, state, {
                faves: state.faves,
                full: true
            });
        }
        break;
    default:
        result = state;
        break;
}