使用userId获取用户信息 - Angular Firestore

时间:2018-04-16 14:55:07

标签: angular firebase google-cloud-firestore

我有两个不同的系列:

  • 用户:姓名,电子邮件和头像(取自社交网络)
  • 食谱:用户可以创建的文档。它还包含userId及其对先前集合的引用

要在我的页面上显示这些食谱,我使用:

this.recipes = collection.snapshotChanges().map(actions => {
      return actions.map(action => ({
        $id: action.payload.doc.id,
        ...action.payload.doc.data()
      }));
    });

<ion-card *ngFor="let recipe of recipes | async; let i = index">
...

获取用户头像和名称的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

对于每个食谱,您都有一个userId。使用它来检索每个配方的用户文档。 (如果用户在列表中出现多次,可能会缓存用户。) 请记住,文档检索是异步的,因此您可能想要创建一个promises数组并使用Promise.all https://stackoverflow.com/a/47554838/179156

答案 1 :(得分:0)

试试此代码

this.recipes = collection.snapshotChanges().map(actions => {
  return actions.map(a => {
    const data = a.payload.doc.data();
    const id = a.payload.doc.id;
    //this.afs.collection('users') is the ref to users collection, yours should be different
    return this.afs.collection('users').doc(data.userId).snapshotChanges().map(userActions=>{
      return userActions.payload.data();
    }).map(user=>{
      return { id:id, userName:user.name, ...data };
    })
  });
}).flatMap(merge => Observable.combineLatest(merge)).map(data => {
  return [].concat(...data).map(d => {
    return d;
  })
});