如何在返回对象之前向其添加属性?

时间:2019-09-04 09:19:39

标签: angular angularfire2

我的问题是,在从Firestore检索值之后,必须在对象中添加一些属性。

让我们想象一下,界面看起来像这样:

export interface Incident {
  uId: string;
  title: string;
  reportedBy: User;
  likedBy: string[];
  content: string;
}

但是为了简化数据模型,在Firestore中,属性reportBy:为相应文档的用户添加了reportBy:字符串(此字符串值表示来自已添加事件的用户的uId)。因此,现在我想获取来自Firestore后端的所有事件的列表,并希望不使用相关用户的uId来显示它们,而是使用其名字和姓氏来显示它们。

因此,我想构造一个函数,该函数首先获取事件集合,但是在返回事件集合之前,应该存在另一个数据库请求,以获取相关用户的用户信息。之后,我想在返回事件列表之前添加此用户信息。我现在拥有的解决方案看起来像这样,但是我不知道如何解决向事件对象添加其他属性的问题。

getRecentIncidents(): Observable<Incident[]>{
    const incidents: AngularFirestoreCollection<Incident> = this.angularFirestore.collection<Incident>('incidents');
    return incidents ? incidents.snapshotChanges().pipe(
      map(incidents => {
        return incidents.map(incident => {
          const data = incident.payload.doc.data();
          console.log('reportedBy: ' + data.reportedBy);
          const user: AngularFirestoreDocument<User> = this.angularFirestore.doc('users/' + data.reportedBy);
          user ? user.snapshotChanges().pipe(
            map(user => {
              const data = user.payload.data() as User;
              const uId = user.payload.id;
              return {uId, ...data}
            })
          ) : null;
          const uId = incident.payload.doc.id;
          return { uId, user, ...data, }
        })
      })
    ) : null;
  }

有人可以帮助我吗?非常感谢您的建议!

0 个答案:

没有答案