我有一个登录功能,当登录尝试失败时会返回错误:
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
函数中?我认为这是最佳做法,因为登录尝试已失败。
答案 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);
}
};