我对rxjs和redux-observable非常陌生。我试图像这样在一个史诗中发出两个ajax请求:
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
中的相同部分运行正常。
我在做什么错?