我写了一个redux thunk,以便在向API发出发布请求后,将调度一个动作并执行一个回调:
import actionTypes from '../actions/actionTypes';
import axios from 'axios';
function postThunk(someValue, callback) {
return dispatch => {
try {
let token = localStorage.getItem('token');
const credentials = {
headers: {
"Authorization" : 'Bearer '+ token,
},
};
const data = {
someValue
}
axios.post('http://myAPI',data, credentials).then(result =>{
dispatch({
type: actionTypes.MY_ACTION,
data: result,
})
});
callback();
} catch (error) {
console.log(error);
}
}
}
export{
postThunk
};
当我调用thunk时,回调实际上只是一个this.props.history.push(/somelocation)
。
因此,正如上面所写的那样,它可以工作,但是我实际上希望回调位于axios.post承诺链内,因为redicrect仅应在POST请求之后发生。但是,如果我将代码更改为此:
axios.post('http://myAPI',data, credentials).then(result =>{
dispatch({
type: actionTypes.MY_ACTION,
data: result,
});
callback();
});
以某种方式不再起作用。 POST请求正在发生,并且数据库已更新,但是没有重定向同一页面,而是进行了重新加载,这使得调试起来也非常困难,因为我真的看不到发生了什么。 有谁知道我需要照顾什么,是调度抛出错误还是我需要一个Redux Prom中间件?