给BehaviorSubject初始值——值是一个Observable

DRN*_*RNR 6 observable rxjs behaviorsubject angular

我知道我无法给出BehaviorSubjectObservable 值,但我需要一种方法来解决这个问题。在应用程序初始化时,我正在获取当前用户(如果存在),并且我需要给出该BehaviorSubject潜在值。所以我的服务代码如下所示:

private user = new BehaviorSubject<User>(this.getUser());
public user$ = this.user.asObservable();

getUser(): User {
  // does obviously not work!
  return this.apiService.getUser()
    .map(data => {
      if(data) {
        return data;
      }
      // do something else
    })  
}
Run Code Online (Sandbox Code Playgroud)

那么是否有一些神奇的 rxjs 运算符可以解决这个问题,或者其他一些可能性?

提前致谢!

Gün*_*uer 3

我会这样做

private user = new BehaviorSubject<User>(null);
public user$ = this.user.asObservable();

constructor() {
  this.getUser();
}

getUser(): User {
  // does obviously not work!
  return this.apiService.getUser()
    .subscribe(data => {
      if(!!data) {
        this.user.next(data); // <<== added
      }
      // do something else
    })  
}
Run Code Online (Sandbox Code Playgroud)

  • 是的,只是想指出这一点。我猜 getUser 返回一个可观察的,所以在这种情况下,您仍然需要修改您的答案:您返回的是订阅,而不是 User 实例 (3认同)