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组件中。希望这有帮助!