【发布时间】:2021-06-18 15:19:24
【问题描述】:
为什么登录出错时我的catch块没有被执行?这是我的事件处理程序:
const handleLogin = async (e) => {
e.preventDefault();
try {
await login(dispatch, loginUser);
} catch (err) {
console.log(err);
setSnackbarOpen(true);
setErrorMessage(err.response.data.message);
}
};
这是我的登录操作:
export const login = async (dispatch, payload) => {
try {
dispatch({
type: "USER_REQUEST",
});
const res = await axios.post("/api/users/auth/signin", payload);
dispatch({
type: "SET_USER",
payload: {
user: {
email: res.data.email,
name: res.data.name,
},
},
});
} catch (err) {
console.log("CAUGHT ERROR IN login()");
dispatch({
type: "SET_ERROR",
payload: { error: err.response.data.message },
});
return err;
}
};
我记录了“登录 () 中的 CAUGHT ERROR”,但未执行我的 handleLogin 捕获块中的代码。
【问题讨论】:
-
您的
login()函数永远不会拒绝它返回的承诺,因此await login()永远不会转到catch。login()函数有时会执行return err,但这只是返回的值,而不是被拒绝的承诺。如果您希望拒绝login()返回的承诺,那么您必须在catch()块中的login()中使用throw err而不是return err。 -
哇,谢谢!这是非常好的信息,它解决了我的问题
标签: async-await promise try-catch