【问题标题】:AngularFire2 return only last selected documentAngularFire2 仅返回最后选择的文档
【发布时间】:2018-08-13 13:50:07
【问题描述】:

我正在尝试使用 AngularFire2 从 Firestore 中获取一个简单的(在我看来)两步查询,但我似乎还不明白该怎么做。

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

我不断收到以下信息:类型“Observable>”不可分配给类型“Observable”。类型“Observable”不可分配给类型“用户”。 “可观察”类型中缺少属性“名称”。

什么,请告诉我,我在这里失踪了吗

【问题讨论】:

  • 您是否尝试过:getProfile(): Observable
  • 我做了,但不是我正在寻找的解决方案,因为我必须订阅并再次订阅。

标签: firebase google-cloud-firestore angularfire2


【解决方案1】:

所以看了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 来展示概念验证。

【讨论】:

  • 感谢您的回答,但实际上我使用 flatMap 得到了它,之前添加运算符时遇到问题,这就是我尝试使用普通地图的原因
【解决方案2】:

所以我似乎是正确的,答案很简单:

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

尝试理解 Observables @午夜不好

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-06
    • 1970-01-01
    • 2011-01-30
    相关资源
    最近更新 更多