У меня есть компонент, в который я отправляю несколько действий:
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.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 количество отправлений в компоненте?