Angular 6 RXJS过滤器等待订阅中的布尔值

时间:2018-08-30 14:34:27

标签: angular rxjs observable

我正在尝试检查用户是否已通过身份验证,并且正在使用一种方法,如果用户已通过身份验证,则该方法返回的观察值为true或false。我正在尝试做的事情是等到授权有一个值,然后在回调函数中检查它是true还是false,并根据其值执行操作。因此,基本上我不希望我的过滤器函数检查值是true还是false,而是在继续订阅回调中的代码之前检查是否有值。

这是我的功能:

this.oidcSecurityService.getIsAuthorized().pipe(filter(authorized => authorized !== undefined)).subscribe(authorized => {
  console.log(authorized);
  this.isAuthorized = authorized;
  if (!authorized) {
    debugger
    this.login()
  }
  else {
    debugger
    this.getBoSpar()
  }
});

我在做什么错了,我该如何使过滤器功能检查是否获取了授权,而不是真或假?我没有收到任何错误,尽管我知道用户已通过身份验证,但授权总会被评估为false(我已经将点击事件发生的逻辑分离开了,并且可行)。

1 个答案:

答案 0 :(得分:0)

authorized !== undefined看起来不正确

authorized != null仅检查null和undefined

this.oidcSecurityService.getIsAuthorized()
  .pipe(
    tap(authorized => console.log('BEFORE', authorized)),
    filter(authorized => authorized != null),
    tap(authorized => console.log('AFTER', authorized))
  )
  .subscribe(authorized => {
    console.log(authorized);
    this.isAuthorized = authorized;
    if (!authorized) {
      debugger
      this.login()
    } else {
      debugger
      this.getBoSpar()
    }
});

还可以使用水龙头检查过滤器前后的通过管道的值。