Фильтр Angular 6 RXJS для ожидания логического значения в подписке - PullRequest
0 голосов
/ 30 августа 2018

Я пытаюсь проверить, аутентифицирован ли пользователь, и я использую метод, который возвращает наблюдаемое либо 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()
  }
});

Что я делаю не так, и как я могу заставить функцию фильтра проверять, выбирается ли санкционировано, а не, если это правда или ложь? Я не получаю никаких ошибок, просто авторизованный всегда оценивается как ложный, хотя я знаю, что пользователь аутентифицирован (я разделяю логику для событий щелчка, и это работает).

1 Ответ

0 голосов
/ 30 августа 2018

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()
    }
});

Стоит также использовать кран, чтобы проверить значения, проходящие через трубу, до и после фильтра.

...