Пользователь aync-await в thun реагирующего-редукса - PullRequest
0 голосов
/ 19 апреля 2019

Я новичок в react-redux. Здесь я пытаюсь использовать aysnc-await. То, что у меня есть, на componentDidMount я называю API, в котором, если там я получил 200 Ok тогда и только тогда я хочу вызвать второй API. поэтому я использую async-await для этого.

export function fetchUserResumes(pageNo, jdId) {
  pageNo = 0;
  let size = 20;
  return (dispatch) => {
    const page = `page=${pageNo}`;
    let url = FETCH_RESUMES + '/' + jdId + '?' + page + '&' + size;
    dispatch({
      type: REQUEST_INITIATED
    })
    return get(url)
      .then((response) => {
        if (response.status === 200) {
          dispatch({
            type: FETCHING_RESUME_SUCCESS,
            data: response.payload
          })
          dispatch({
            type: REQUEST_SUCCESSED
          })
        } else {
          if (!response.status) {
            toastr.error('Our server is down. Please check again');
          }
          else if (response.status.status === 401) {
            dispatch(logout());
          }
          else if (response.status.status === 500) {
            toastr.error("Error while fetching Job description,Please try again");
            dispatch({
              type: FETCHING_RESUME_FAILED,
              data: response.status,
            });
            dispatch({
              type: REQUEST_SUCCESSED
            })
          } else {
            dispatch({
              type: REQUEST_SUCCESSED
            })
          }
        }
        return true;
      })
  }
};

Действие, которое вызывается по didmout:

export function getUserJobInfo(jobId) {
  return async (dispatch) => {
    dispatch({
      type: REQUEST_INITIATED
    });
    let url = GET_JOB_INFO_URL + jobId;
    let response = await get(url);
    if (response.status === 200) {
      let pageNo = 0;
      let size = 20;
      const page = `page=${pageNo}`;
      let url = FETCH_RESUMES + '/' + jobId + '?' + page + '&' + size;
      let newApiResponse = await get(dispatch(fetchUserResumes(pageNo, jobId)));
      dispatch({
        type: USER_JOB_INFO,
        data: response.payload
      })
    }
    else {
    }
  }
}

Это способ, которым я пытался это сделать. Но здесь я очень запутался, когда использую async await. Поэтому любой может помочь мне решить эту проблему. Спасибо.

1 Ответ

0 голосов
/ 19 апреля 2019

Вам не нужно вызывать get для await get(dispatch(fetchUserResumes(pageNo, jobId)));.

. В случае thunk dispatch возвращает то же самое, что возвращает внутреннюю функцию.Таким образом, в вашем случае тип возврата будет Promiseawait работает с любыми обещаниями.

  let newApiResponse = await dispatch(fetchUserResumes(pageNo, jobId));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...