创建一个一旦捕获到有效authState的订阅,将停止“轮询”

时间:2019-08-25 09:03:25

标签: angular typescript ngrx

是否可以创建一个订阅,尝试重复获取用户的身份验证状态,直到user != null,一旦出现这种情况,它将停止:

  ngOnInit() {
    this.isMobile = this.breakpointObserver.observe([Breakpoints.Handset]);
    this.authSubscription = this.afAuth.authState.subscribe(user => {
      if(user) {
        localStorage.setItem('uid', user.uid);
        this.store.dispatch(userActions.getData());
      }
    })
  }

控制台输出如下,导致浏览器崩溃:

enter image description here

我的动作如下:

  @Effect()
  getData$ = this.actions$.pipe(
    ofType(UserActions.getData),
    switchMap(() => {
        return this.userService.getUserById(localStorage.getItem('uid')).pipe(
          map(
            (data: IUser) => UserActions.dataReceived({ payload: UserService.parseData(data) })
          )
        );
      }
    )
  );

1 个答案:

答案 0 :(得分:1)

您可以结合使用takeUntil()运算符和interval()

我更喜欢这种解决方案,因为您不会在另一个请求之后触发请求1,因此您会在这之间留出一些时间。