AngularFire2仅返回最后选择的文档

时间:2018-03-05 19:54:05

标签: firebase google-cloud-firestore angularfire2

我正在尝试使用AngularFire2从firestore获得一个简单的(在我看来)2步查询,但我似乎无法理解该怎么做。

    getProfile(): Observable<User>{
    return this.afAuth.authState.map(user => {          
      return this.db.doc<User>('user/'+user.uid).valueChanges();
    });
  }

我不断获得以下内容:输入'Observable&gt;'不能分配给'Observable'类型。类型'Observable'不能指定为'User'类型。 “Observable”类型中缺少属性“name”。

什么,祈祷告诉我,我在这里失踪

2 个答案:

答案 0 :(得分:0)

所以在查看FireBase documentation here后,我的建议如下:

getProfile(): Observable<User>{
  return this.afAuth.authState.map(user => {          
    return this.db.doc<User>('user/'+user.uid)
                                      .valueChanges()
                                      .map(fUser=>{
                                            // code here to construct user object if needed
                                           return fUser;
                                       });
  });
}

<强>解释

由于FireBase使用以下设计存储其变量:

user: Observable<any[]>';
constructor( ... ){
    this.items = db.collection('items').valueChanges();
}

您需要通过使用map()函数从valueChanges()返回的Observable中提取单个用户对象。

我还创建了一个StackBlitz here来展示概念证明。

答案 1 :(得分:0)

所以我认为答案很简单:

   getProfile$(): Observable<User>{
    return this.afAuth.authState.flatMap(user => {
      return this.db.doc<User>('user/'+user.uid).valueChanges();
    });
  }

尝试理解Observables @ midnight

并不好