Я использую redux-thunk для вызова действий и редукторов для возврата состояний. Мои действия - это, по сути, ax ios API-запросы к серверной части. Для одного конкретного действия мне нужен набор событий, отправляемых в точном порядке, как они показаны в коде:
- Проверить, является ли
tokenvalue
, переданный пользователем, действительным (у которого есть свой собственный ax ios запрос api к коллекции токенов). Если 1. не удалось, перейти к блоку catch. - Если токен действительно действителен, зарегистрируйте пользователя, используя ax ios post. если 2. не удается, перейти к блоку перехвата.
- Если пользователь был зарегистрирован успешно, установите токен для пользователя (таким образом, только один уникальный токен на пользователя). Если 3. не удается, перейти к блоку catch.
Чтобы реализовать их последовательно в указанном выше порядке, я помещаю их в блоки try-catch. Оказывается, я неправильно понимаю, как работает dispatch
- если отправка завершается неудачно с ошибкой, она все равно выполняет последующие отправки. Любые предложения о том, как я могу это решить? :
export const register = ({name,email,password,tokenval}) => async(dispatch) =>{
try{
await dispatch(checkTokenValidity(tokenval)); // if this fails, jump to catch block
const res = await axios.post("/api/users", body, config); //if this fails jump to catch
await dispatch(setUserToToken({ tokenval, userID: res.data.userID })); //if this fails jump to catch
dispatch({
type: REGISTER_SUCCESS,
payload: res.data,
});
}catch(err){
dispatch({
type: REGISTER_FAIL,
});
}
};