首页 > 解决方案 > 纯 rxjs if/else 语句未通过合并到达 else 语句

问题描述

我尝试用用户状态登录在纯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)
)

谢谢你的帮助。

标签: angularrxjs

解决方案


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

删除share()源 Observable(此处signedIn$)上的运算符后,此行为发生了变化,合并的两个流都会流动,我的问题就解决了。


推荐阅读