Как дождаться выполнения dispatch'а с передачей в него async action в redux?

Есть код:
dispatch({type: Constant.SOME_OPERATION_1})
dispatch(createAccount())
dispatch({type: Constant.SOME_OPERATION_2})

`createAccount` являелся async action'он и выглядит примерно так:
export const createAccount = () => async (dispatch) => {
	// request api
	// dispatch({type: SMTH})
	// another request api
	// dispatch({type: SMTH2})
}
  • Вопрос задан
  • 1877 просмотров
Решения вопроса 1
rockon404
@rockon404 Куратор тега React
Frontend Developer
Если вы хотите дождаться выполнения асинхронных вызовов в асинхронных функциях, то их надо делать с использованием ключевого слова 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
  }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы