Каково поведение forkJoin, когда его нет в SwitchMap / MergeMap в Epics - PullRequest
1 голос
/ 01 июня 2019

Я хочу понять, что происходит, когда я напрямую перенаправляю к действию $ и пытаюсь использовать оператор forkJoin

const action1 = { type: "ACTION_1" };
const action2 = { type: "ACTION_2" };

в switchMap forkJoin работает нормально.



export const testForkJoinSwitchMap: Epic<Action> = action$ =>
  action$.pipe(
    ofType(action1),
    switchMap(() =>
      forkJoin(
        from(fetch("https://api.github.com/users")).pipe(
          map((res: any) => {
            return res;
          })
        )
      )
    ),
    map((data: any) => {
      // do something with data
      return action2;
    })
  );

Если явынул его из switchMap, затем:


export const testForkJoin: Epic<Action> = action$ =>
  action$.pipe(
    ofType(action1),
    forkJoin(from(fetch("https://api.github.com/users"))).pipe(
      map((response: any) => {
        return action2;
      })
    )
  );

Я получаю сообщение об ошибке:

Argument of type 'Observable<{ type: string; }>' is not assignable to parameter of type 'OperatorFunction<{}, Action<any>>'.

Я хочу знать, почему он не компилируется?и причина несоответствия типов: что делает в этом случае эпики без forkJoin недействительными в этом случае?

edit: я знаю, что forkJoin не имеет смысла для одной наблюдаемой, но я поставил 1, чтобы уменьшить пример

1 Ответ

0 голосов
/ 01 июня 2019

observable.pipe() принимает только операторов внутри.

forkJoin - это оператор, который возвращает наблюдаемое , поэтому вы получаете эту ошибку. Argument of type 'Observable' is not assignable to parameter of type 'OperatorFunction' Т.е. forkJoin, который возвращает наблюдаемое, не присваивается типу операторской функции.

switchMap, с другой стороны, является оператором, который возвращает OperatorFunction и работает с наблюдаемой, поэтому ваш первый подход сработал. switchMap(() => someObservable) и someObservable в этом случае forkJoin()

Это также видно из вашего импорта. Вы могли импортировать forkJoin из библиотеки rxjs, тогда как switchMap из библиотеки rxjs/operators.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...