将boolean从observable传递给observable

Har*_*ger 7 firebase typescript firebase-authentication angularfire2 angular

我想检查我的adminauthguard,如果用户设置了adminflag(在Firebase中使用angularfire2)

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot):Observable<boolean> | boolean {
    return this.loginservice.af.auth.map((auth) =>  {
      if(auth == null) {
        return false;
      } else {
        this.membersservice.get(auth.uid).subscribe(users => {
          if(users.admin == true) {
            return true;
          } else {
            return false;
          }
        })
      }
    });
Run Code Online (Sandbox Code Playgroud)

如何在可观察的内部解析observable?

小智 15

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot):Observable<boolean> | boolean {

return new Observable<boolean>( observer => {

   this.loginservice.af.auth.map((auth) =>  {
      if(auth == null) {
        observer.next(false);
      } else {
        this.membersservice.get(auth.uid).subscribe(users => {
          if(users.admin == true) {
            observer.next(true);
          } else {
            observer.next(false);
          }
        })
      }
    });
Run Code Online (Sandbox Code Playgroud)

不是1000%确定这是否适用于您的服务Observables,因为我不完全知道Angular2的Firebase(仅限iOS),但是这样您创建了一个只根据闭包内发生的事件发出值的observable.

您可能需要确保(通过测试)的唯一事情是您不会遇到未定义的状态,例如像您发出true和false的异步危险.