如何在一个史诗[redux-observable]中发出两个请求?

问题描述 投票:0回答:1

我对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中的相同部分运行正常。

我在做什么错?

javascript redux rxjs redux-observable
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.