Rxjs 等待多个操作在epic中完成,然后再分派操作
我有一个组件,可以在其中分派多个操作:Rxjs 等待多个操作在epic中完成,然后再分派操作,rxjs,redux-observable,Rxjs,Redux Observable,我有一个组件,可以在其中分派多个操作: dispatch(action1()); dispatch(action2()); 我有一个epic,它监听这两个动作,并为每个动作调用ajax: export const fetchObservable = action$ => action$.ofType(...actions) // wait for either action .mergeMap(({ url, method, body, success, error, res
dispatch(action1());
dispatch(action2());
我有一个epic,它监听这两个动作,并为每个动作调用ajax:
export const fetchObservable = action$ =>
action$.ofType(...actions) // wait for either action
.mergeMap(({ url, method, body, success, error, responseType }) =>
authenticate$
.mergeMap(token => ajax$(url, method, body, token, responseType))
.pluck('response')
.mergeMap(response => Observable.of(success(response), hideLoading()))
.startWith(showLoading())
.catch(response => Observable.of(error(response)))
);
我使用showLoading()
显示加载微调器,并使用hideLoading()
问题是,一旦第一个可观察对象完成并且调用了observable.of(success(response),hideLoading())
,加载微调器就会消失
装载机的减速器如下所示:
const loader = (state = false, action) => {
switch (action.type) {
case SHOW_LOADING:
return true;
case HIDE_LOADING:
return false;
default:
return state;
}
}
在调用hideLoading之前,如何等待两个操作完成?我如何开发一个解决方案,在一个组件中等待x个调度数?Observable.zip(action1Stream,action2Stream).subscribe()为什么它们是单独的操作?@jayphelps它们是多个操作,因为它们使用不同的API。如果我做了类似于
const action1=id=>{return dispatch=>{dispatch(action2(id))dispatch(action3(id))}
的事情,我想我还是会遇到同样的问题,不是吗?对不起,我的意思是,我的建议是,如果您的业务逻辑要求进行两个API调用,但您需要等待它们都返回,然后再删除加载指示器,那么该逻辑最好属于您的Epics。因此,您的UI组件调度一个动作,一个Epic将两个API调用放在一起。当使用redux之类的中间件时,可观察的业务逻辑应该在reducers+epics中,而不是在UI组件中。希望这有帮助!