返回新错误出现在然后没有捕获功能?

时间:2018-08-28 10:34:17

标签: javascript

我有一个登录功能,当登录尝试失败时会返回错误:

export const login = async () => {
  try {
    // Code to get res

    if (res.status === 200) {
      document.cookie = `userToken=${data.token}`;
    } else if (res.status === 400) {
      return new Error("Oh noo!!!");
    }
  } catch (err) {
    alert('err!! ', err);
  }
};

登录表单使用以下命令进行调用:

submit = async event => {
    login()
      .then(res => {
        console.log('res ', res);
      })
      .catch(err => {
        console.log('err ', err);
      });
  };

当res.status为400并返回错误时,它将显示在then函数中,而不是catch函数中。我该如何使其显示在catch函数中?我认为这是最佳做法,因为登录尝试已失败。

2 个答案:

答案 0 :(得分:0)

当解释器看到return之后的表达式时,该表达式将在被求值后立即返回-即使是错误,也不会进入{{1 }}块。单独声明错误也不会引起问题-您实际上需要它:

catch

如果您还希望} else if (res.status === 400) { throw new Error("Oh noo!!!"); } 函数也能处理错误,则不要将submit / try放在catch中,因为这样会调用异步函数将解决而不是被拒绝-相反,只需让login抛出,而login处理submit

catch

答案 1 :(得分:0)

您应该throw错误而不是返回错误,throw ...在当前代码块中引发异常,并使其退出,或者在出现以下情况时流向下一个catch语句try块。

export const login = async () => {
  try {
    // Code to get res

    if (res.status === 200) {
      document.cookie = `userToken=${data.token}`;
    } else if (res.status === 400) {
      throw Error("Oh noo!!!");
    }
  } catch (err) {
    alert('err!! ', err);
  }
};