如何从可观察流中检索特定字段?

时间:2017-06-13 12:17:14

标签: angular typescript rxjs observable angular2-observables

我创建了Follow Observable Stream,它保存了User Object。

currentUserProfile$ = new BehaviorSubject<UserProfile>(null);

要初始化此流,我已定义以下方法:

getCurrentUserProfile(userId):void{
    let profile:UserProfile= new UserProfile({});
    this._empService.getUserInfo(userId).subscribe(
        (response)=>{
          profile=response.profileData;
          profile.isAuthenticated=true;
          this.currentUserProfile$.next(profile); 
        },
        (error)=>{
          profile.isAuthenticated=true;
          this.currentUserProfile$.next(profile);
          console.error(error);
        }
    );
}

现在我想为流包含的每个属性创建方法。对于前。

getUserRole(){
    let roles:Array<any>;
    this.currentUserProfile$.subscribe((profile:UserProfile)=>{
      roles=profile.roles;
    });
    return roles;
}

hasRole(role:string):boolean{
    let res:boolean;
    this.currentUserProfile$.subscribe(
      (profile)=>{
        res=profile.roles.indexOf(role) !== -1;
      }
    );
    return res;
}

有没有比这更简单的方法?

提前致谢

1 个答案:

答案 0 :(得分:0)

我宁愿按原样保持可观察性,并对它进行一些转换

getUserRole(){
    return this.currentUserProfile.map((profile:UserProfile)=> profile.roles);
}

hasRole(role:string):boolean{
    return this.currentUserProfile$.reduce((role) => 
        profile.roles.indexOf(role) !== -1;
    );
}