Я очень новичок в rx js и могу наблюдать за редуксом. Я пытаюсь сделать два ajax запроса в одном epi c примерно так:
import { mergeMap, filter, map, catchError } from 'rxjs/operators';
import { of } from 'rxjs';
import { ofType } from 'redux-observable';
import { push } from 'connected-react-router';
export const doSomething = (action$: any, state$: any) =>
action$.pipe(
ofType('SOMETHING_HAPPEND'),
filter((action: any) => action.payload.status === 'SOME_ACTION'),
mergeMap(() =>
ajax.getJSON('/api/somewhere').pipe(
map(() => push('some_route')),
catchError((error: ResponseError) => of(statusChangeError(error)))
)
),
filter(() => {
const { startTime, endTime } = getFormData(state$.value);
return startTime && endTime;
}),
mergeMap(() =>
ajax({
url: './api/another',
method: 'POST',
body: getFormData(state$.value),
}).pipe(
map(() => push('another_route')),
catchError((error: ResponseError) => of(statusChangeError(error)))
)
)
);
Первый запрос должен всегда выполняться. Второй запрос условный, для этого у меня есть filter
. Я не уверен, что это правильный способ делать такие вещи. кажется, что работает, за исключением того, что эта часть
map(() => push('some_route')),
в первом mergeMap
не вызывается. Та же самая часть во втором mergeMap
работает нормально.
Что я делаю не так?