【发布时间】:2017-11-03 03:34:22
【问题描述】:
我正在使用 react 与 redux 和 thunk 中间件。我想做一个异步请求,然后有一堆动作。然后它会以同步顺序发生。我无法实现它。
以下是我尝试过的两种方法:
addStudent(name, campusId = undefined, view = 'students') {
const creatingStudent = axios.post('/api/student', { name: name, campusId: campusId })
.then(res => {
return res.data
})
.then(student => {
return store.dispatch(createStudent(student))
})
.then(()=> {return store.dispatch(getStudents())})
.then(()=> {return store.dispatch(changeView(view))})
.catch(err => console.log(err))
addStudent(name, campusId = undefined, view = 'students') {
const creatingStudent = axios.post('/api/student', { name: name, campusId: campusId })
.then(res => {
return res.data
})
.then(student => {
store.dispatch(createStudent(student))
store.dispatch(getStudents())
store.dispatch(changeView(view))
})
.catch(err => console.log(err))
}
我想要订单: 1)axios请求 2) 派遣 createStudent 3) 派遣 getStudents 4) 调度 changeView
但是我已经安装了日志中间件,并且 3 和 4 总是颠倒的。此外,特别是使用第二个选项时,我偶尔会收到一个致命错误,我认为这是由其他一些顺序颠倒引起的,但我无法准确判断是什么顺序,因为应用程序在记录之前就崩溃了。
我也尝试链接调用以相互调度,但这似乎不起作用,可能是因为它们没有返回承诺。
这是我的 getStudents 动作创建者:
export const getStudents = () => {
return dispatch => {
axios.get('/api/students')
.then(response => {
return dispatch(receiveStudents(response.data));
});
}
};
这是有道理的,因为它击中服务器需要更长的时间,但是如果 store.dispatch 没有返回承诺,我怎么能 .then 关闭它?这样做的正确方法是什么?
编辑:这最初没有明确说明。我应该更明确地说,我的挫败感是 changeViews() 是在 receiveStudents() 之前发送的,而不是像我暗示的那样,changeViews() 是在 getStudents() 之前发送的。我不知道 getStudents() 何时发送。
【问题讨论】:
标签: reactjs redux axios redux-thunk