我有一个组件可以发送多个动作:
dispatch(action1());
dispatch(action2());
我有一个史诗,它会侦听这两个动作,并为每个动作调用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完成并调用Observable.of(success(response), hideLoading())
,加载微调器就会消失。
加载程序的reducer如下所示:
const loader = (state = false, action) => {
switch (action.type) {
case SHOW_LOADING:
return true;
case HIDE_LOADING:
return false;
default:
return state;
}
}
如何在调用hideLoading之前等待两个操作完成?我如何开发一个等待组件中x次调度的解决方案?