Если вы хотите дождаться выполнения асинхронных вызовов в асинхронных функциях, то их надо делать с использованием ключевого слова await. Вызовы dispatch с передачей обычных объектов действий выполняются синхронно.
const someCall = () => async dispatch() => {
dispatch({type: Constant.SOME_OPERATION_1});
await dispatch(createAccount());
dispatch({type: Constant.SOME_OPERATION_2});
};
export const createAccount = () => async (dispatch) => {
await request api;
dispatch({type: SMTH});
await another request api;
dispatch({type: SMTH2});
}
Так же для обработки неудачных ответов сервера можно использовать try/catch:
export const createAccount = () => async (dispatch) => {
try {
await request api;
dispatch({type: SMTH});
await another request api;
dispatch({type: SMTH2});
catch (e) {
// handle error here
}
}