Возвращение наблюдаемого из результата наблюдаемого - PullRequest
0 голосов
/ 08 ноября 2018

Я очень плохо знаком с RxJS, поэтому я не совсем уверен, какой вопрос мне следует задавать здесь.У меня есть служба, которая возвращает наблюдаемое логическое значение:

@Injectable
export class UserService {
  private isLoggedInSubject = new ReplaySubject<boolean>(1);
  public isLoggedIn = this.isLoggedInSubject.asObservable();
}

В охраннике маршрута Angular 6 я передаю это значение, чтобы предотвратить доступ к маршруту:

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {
  return this.userService.isLoggedIn.pipe(take(1)); 
}

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

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {
  const isLoggedIn = this.userService.isLoggedIn.pipe(take(1));

  return isLoggedIn.[???something????](x => {
    if (x) {
      console.log('is logged in');
      return Observable.of(true);
    } else {
      console.log('is not logged in ');
      return Observable.of(false);
    }
  });
}

1 Ответ

0 голосов
/ 08 ноября 2018

Вы просто связываете его с большим количеством операторов:

return this.userService.isLoggedIn.pipe(
  take(1),
  concatMap(x => {
    if (x) {
      console.log('is logged in');
      return Observable.of(true);
    } else {
      console.log('is not logged in ');
      return Observable.of(false);
    })
  },
);

Кстати, вам даже не нужно возвращаться Observable.of. Вы можете использовать только map и вернуть, например. false.

...