这是一个同步的axios请求?

时间:2019-05-07 06:36:17

标签: javascript reactjs redux axios

我在redux中使用axios。我不知道这里是我与axios的api调用。它是同步工作吗?如果没有,我该如何同步呢?

return (dispatch) => {
  dispatch({
    type: FETCH_ALLDRIVER_DATA_START
  })

  return axios.post(baseUrl + 'v1/drivers/alldriver', {
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json'
      }
    })
    .then(response => {
      console.log('jj')
      console.log(response)
    })
    .catch(error => {
      throw (error);
    });
};

1 个答案:

答案 0 :(得分:0)

如果在调用dispatch函数之前需要结束请求,则可以在promise resolve回调(then)中对其进行调用,如下所示:

return (dispatch) => {
    return axios.post(baseUrl + 'v1/drivers/alldriver', {
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json'
      }
    })
    .then(response => {
      console.log('jj')
      console.log(response)
      // here call whatever you want to do after a succesful request
      dispatch({
          type: FETCH_ALLDRIVER_DATA_START
      })
    })
    .catch(error => {
      throw (error);
    });
};

请记住,这仍然是 async 调用,但是在请求成功结束后将执行代码beign。

如果您确实要进行同步通话,请像下面这样使用asyncawait

return async (dispatch) => {
    const response = await axios.post(baseUrl + 'v1/drivers/alldriver', {
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json'
      }
    });

    dispatch({
        type: FETCH_ALLDRIVER_DATA_START
    })
};

虽然我不知道redux在同步通话中的表现如何。

我不确定您要达到什么目的以及为什么您需要同步请求请求。如果您的组件在渲染时没有数据或类似数据,则解决方案必须位于其他位置,而不是此调用中。

希望有帮助。