Задать вопрос
@ch-aqwer

Как вызвать еще один метод при success action-a, react/redux?

Добрый день! Подскажите пожалуйста как правильно сделать еще один запрос в action(react/redux)?
Есть такой запрос, его вызываю в componentDidMount() и если success то надо выполнить еще один аналогичный.
export const getReq = data => (
  async (dispatch) => {
    console.log(dispatch);
    try {
      await dispatch({
        type: types.GET_REQUEST,
      });
      await api.getReq(data);
      console.log(data);
      await dispatch({
        type: types.GET_SUCCESS,
        payload: data,
      });

      await api.getReq2(data); // ЗДЕСЬ ТАК ПРОБУЮ ВЫЗВАТЬ ЕЩЕ ОДИН ТАКОЙ ЖЕ ЗАПРОС
    } catch (error) {
      await dispatch({
        type: types.GET_ERROR,
      });
    }
  }
);

но в таком случае он не выполняется вообще. Что-то не правильно пишу.

Спасибо
  • Вопрос задан
  • 276 просмотров
Подписаться 1 Простой 5 комментариев
Решения вопроса 1
rockon404
@rockon404 Куратор тега React
Frontend Developer
Так:
export const getReq = data => (
  async dispatch => {
    try {
      dispatch({
        type: types.GET_REQUEST,
      });

      let res = await api.getReq(data);
      
      dispatch({
        type: types.GET_SUCCESS,
        payload: res,
      });

      res = await api.getReq2(data); 

    } catch (error) {
      dispatch({
        type: types.GET_ERROR,
      });
    }
  }
);

dispatch синхронный вызов, нет смысла перед ним писать await.

Если надо запустить втрой aync action то так:
export const getReq = data => (
  async dispatch => {
    try {
      dispatch({
        type: types.GET_REQUEST,
      });

      const res = await api.getReq(data);
      
      dispatch({
        type: types.GET_SUCCESS,
        payload: res,
      });

      dispatch(req2(res));
    } catch (error) {
      dispatch({
        type: types.GET_ERROR,
      });
    }
  }
);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
gibson_dev
@gibson_dev
getReq2 это асинхронная (async) функция?
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы