【发布时间】:2018-05-22 17:26:20
【问题描述】:
我到处搜索,找不到以下问题的答案...
在我的 addItemEpic 中,我想在发送 ajax 请求之前调度一个“加载”操作 - 我不希望返回操作的值 - 我只想执行操作然后返回 ajax 响应。 这可以通过 store.dispatch() 轻松实现,如下所示:
export const addItemsEpic = (action$, store) =>
action$.ofType(ADD_ITEM)
.do(() => store.dispatch({
type: 'layout/UPDATE_LAYOUT',
payload: { loading: true }
}))
.switchMap(action => api.addItem(action.payload))
.map(item => loadItem(item))
.do(() => store.dispatch({
type: 'layout/UPDATE_LAYOUT',
payload: { loading: false }
}))
.catch(error => Observable.of({
type: 'AJAX_ERROR',
payload: error,
error: true
}));
但是在 redux-observable 中不推荐使用 store.dispatch()。
我已经尝试使用几乎所有可能的运算符,但我仍然无法在不破坏下一个链接函数中的返回值的情况下调度操作。我认为应该这样做:
action$.ofType(ADD_ITEM)
.concatMap(action => Observable.of(
updateLayout({loading: true}),
api.addItem(action.payload)).last())
.map(item => loadItem(item))
但不幸的是这里有两个问题:
- 没有分派加载操作(值作为可观察值返回)
- api 请求现在返回一个包装好的承诺,而不是一个可映射的值
我非常感谢这里的一些帮助或建议,因为我找不到任何方法来使它正常工作。
提前致谢
【问题讨论】:
标签: reactjs redux rxjs5 redux-observable