我具有以下redux函数,将新用户添加到我的数据库中。它工作正常,但是如果我在then
中引入另一个调用,可能需要对所有内容进行大量捕获。
如果我们将async
放入try/Catch
中来处理所有错误该怎么办?
我尝试了一个样本,但一直缺少一些东西。
有人可以帮我安排一下。谢谢。
export function newUser(values) {
return function(dispatch) {
const promise = axios.post(URL)
dispatch(createAdminUsersRequest(promise));
promise.then(
user => {
dispatch(createUsersSuccess(user));
dispatch(fetchUsers());
dispatch(switchUserActions(false, false, false));
},
function(error) {
if (error && error.response && error.response.data)
error = error.response.data;
if (error && error.data) {
error = error.data;
}
dispatch(createUsersFail(errors(error)));
setTimeout(() => dispatch(createUsersFail(null)), 6000);
}
);
return promise;
};
}
答案 0 :(得分:1)
将诺言转换为异步等待非常简单。首先,通过向其添加一个async
关键字来将该函数声明为async
。其次,您在承诺中使用await
export function newUser(values) {
return async function(dispatch) {
dispatch(createAdminUsersRequest(promise));
try {
const user = await axios.post(URL);
dispatch(createUsersSuccess(user));
dispatch(fetchUsers());
dispatch(switchUserActions(false, false, false));
} catch(error) {
if (error && error.response && error.response.data)
error = error.response.data;
if (error && error.data) {
error = error.data;
}
dispatch(createUsersFail(errors(error)));
setTimeout(() => dispatch(createUsersFail(null)), 6000);
}
};
}