возврат для SwitchMap в Rxjs - угловой - PullRequest
0 голосов
/ 23 мая 2019

Я впервые использую switchMap. Он говорит мне вернуть «что-то», но когда я ставлю возврат, это не работает.

 @Effect()
  subData$ = this.actions$.pipe(
    ofType(ActionTypes.SEARCH_SUB_DATA),
    map(action => action['payload']),
    switchMap(payload => { //Payload gets highlighted in red
      const repos = this.githubSearch.getRepos(payload);
      const followers = this.githubSearch.getFollowers(payload);
      const starred = this.githubSearch.getStarred(payload);
      return forkJoin([repos, followers, starred]).subscribe(results => {
        this.store.dispatch(
          new UserActions.SuccessSubData({
            user: payload,
            repos: results[0],
            followers: results[1],
            starred: results[2]
          })
        );
        return of(results);
      });
    })
  );

Аргумент типа '(полезная нагрузка: никогда) => Подписка' не назначается к параметру типа '(значение: никогда, индекс: число) => ObservableInput <{}>». Тип «Подписка» нельзя назначить типу 'ObservableInput <{}>'.

ОБНОВЛЕНИЕ НА ОСНОВАНИИ ОТВЕТА

@Effect()
      subData$ = this.actions$.pipe(
        ofType(ActionTypes.SEARCH_SUB_DATA),
        map(action => action['payload']),
        switchMap(payload => {
          return forkJoin(
            this.githubSearch.getRepos(payload),
            this.githubSearch.getFollowers(payload)
          );
        }).subscribe(results => {
          this.store.dispatch(
            new UserActions.SuccessSubData({
              user: payload,
              repos: results[0],
              followers: results[1]
            })
          );
        })
      );

Вот изображение, показывающее ошибки

изображение с ошибкой

Ответы [ 2 ]

1 голос
/ 23 мая 2019
@Effect()
  subData$ = this.actions$.pipe(
    ofType(ActionTypes.SEARCH_SUB_DATA),
    map(action => action['payload']),
    switchMap(payload => {
      return forkJoin(
        this.githubSearch.getRepos(payload),
        this.githubSearch.getFollowers(payload)
      ).pipe(map(([repos,followers]) => //return success action here), catchError(error => of(//return failaction))
    })
  )

Обычно вам не нужно подписываться, он просто возвращает поток и позволяет ngrx обрабатывать подписку и отписку.Итак, здесь я отображаю успешные и неудачные действия обратного вызова.Они будут автоматически вызваны ngrx.

0 голосов
/ 23 мая 2019

Вы пытаетесь объединить Observable с Subscription, а также при использовании forkJoin вы используете с двумя undefined значениями.Код ниже должен работать для вашего случая.

@Effect()
  subData$ = this.actions$.pipe(
    ofType(ActionTypes.SEARCH_SUB_DATA),
    map(action => action['payload']),
    switchMap(payload => {
      return forkJoin(
        this.githubSearch.getRepos(payload),
        this.githubSearch.getFollowers(payload)
      );
    })
  ).subscribe(results => {
      this.store.dispatch(
        new UserActions.SuccessSubData({
          user: payload,
          repos: results[0],
          followers: results[1]
        })
      );
    });
...