如何在Angular中将普通函数订阅为Observable

时间:2019-07-10 07:49:31

标签: javascript angular angular6 observable mean-stack

我有一个返回对象的函数。

           getUserState(): UserState {
              return this.userState;
           }

我将上述函数结果存储在以下可观察到的地方:

       username$: Observable<UserState[]>;

       constructor(private userService:UserStateService) {}

       ngOnInit(): void {
            this.username$ = this.userService.getUserState().map(data => 
            {
              this.username$ = data;
            }) 
      }

在这里我得到了错误:

        Property 'map' does not exist on type 'UserState'.

我做错了什么?

2 个答案:

答案 0 :(得分:0)

首先返回一个实际的可观察值:

getUserState(): Observable<UserState> {
  return of(this.userState);
}

第二,您不需要地图,也许您可​​以使用share或shareReplay

ngOnInit(): void {
  this.username$ = this.userService.getUserState().pipe(share());
}

第三,我想您是在模板中的某处使用它

{{ username$ | async | json }}

如果不是像这样订阅

ngOnInit(): void {
  this.subscription = this.userService.getUserState().subscribe((state: UserState) => ...);
}
ngOndestroy(): void {
  this.subscription.unsubscribe(); // clean up after yourself
}

答案 1 :(得分:-1)

尝试导入“地图”运算符。

导入'rxjs / add / operator / map'