我在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);
});
};
答案 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。
如果您确实要进行同步通话,请像下面这样使用async
和await
:
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
在同步通话中的表现如何。
我不确定您要达到什么目的以及为什么您需要同步请求请求。如果您的组件在渲染时没有数据或类似数据,则解决方案必须位于其他位置,而不是此调用中。
希望有帮助。