чистый оператор rxjs if / else не достигает оператора else с помощью merge - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь написать оператор if / else в чистом rxjs со входом статуса пользователя. В случае, если пользователь не вошел в систему, я сохраняю только URL для перенаправления после входа.

Проблема, с которой я сталкиваюсь, заключается в том, что URL-адрес не сохраняется, когда пользователь не подключен.

ngOnInit() {
    this.initContactUsForm();

    const signedIn$ = this.authQuery.select(state => state.signedIn).pipe(share());

    const isSignedIn$ = signedIn$.pipe(
      filter((signedIn: boolean) => signedIn),
      switchMap((signedIn: boolean) => {
        this.isSignedIn = signedIn;
        this.userId = this.authQuery.getSnapshot().sub;
        return this.authService.currentAuthenticatedUser());
      })
    );

    const isNotSignedIn$ = signedIn$.pipe(
      filter((signedIn: boolean) => !signedIn),
      switchMap((signedIn: boolean) => {
        this.isSignedIn = signedIn;
        this.authService.storeAttemptedUrl(this.router.url);
        return empty();
      })
    )

    merge(isSignedIn$, isNotSignedIn$).subscribe(
      (user: any) => this.setContactUsFormSenderUserValues(user),
      (error: any) => console.log(error)
    )
  }

Я что-то упустил, чтобы получить мой URL-адрес?Что я делаю не так?

Редактировать: Сначала у меня было это, которое работает.Но я хочу это в чистом наблюдаемом стиле.

signedIn$.pipe(
  switchMap((signedIn: boolean) => {
    if (signedIn) {
      this.isSignedIn = signedIn;
      this.userId = this.authQuery.getSnapshot().sub;
      return this.authService.currentAuthenticatedUser();
    } else {
      this.isSignedIn = signedIn;
      const url = this.router.url;
      this.authService.storeAttemptedUrl(url);
      return empty();
    }
  }),
).subscribe(
  (user: any) => this.setContactUsFormSenderUserValues(user),
  (error: any) => console.log(error)
)

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 30 апреля 2019

Я столкнулся с таким же проблематичным поведением.Я заметил, что при слиянии моих потоков (здесь isSignedId$ и isNotSignedIn$), второй вход потока в слиянии (здесь isNotSignedIn$) не начнет течь.

После удаления оператора share() в исходном Наблюдаемом (здесь signedIn$) это поведение изменилось, оба потока слились бы, и моя проблема была решена.

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