纯rxjs if / else语句未通过合并到达else语句

时间:2018-12-05 14:00:53

标签: angular rxjs

我尝试用纯rxjs编写一个具有用户状态登录的if / else语句。如果用户未登录,则我只保留登录后重定向的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)
    )
  }

我是否缺少获取网址的内容?我在做什么错了?

编辑: 起初,我有这个正在工作。但是我想要纯可观察的样式。

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 :(得分:0)

我遇到了同样的问题行为。我观察到,合并流(此处为isSignedId$isNotSignedIn$)时,合并(此处为isNotSignedIn$)中的第二个流输入将不会开始流动。

在移除源Observable(此处为share())上的signedIn$运算符后,此行为发生了变化,两个流合并将流动并且我的问题得到解决。