Md.*_*lam 9 angularfire2 angular google-cloud-firestore
我有3个收藏:
现在我需要获取用户详细信息的用户详细信息
我的代码是:
return this.dbCollectionService.userOrganizationCollection.snapshotChanges()
      .pipe(map(res => {
        return res.map(data => {
          var userData = data.payload.doc.data()
         let userDetails : any;
         if (userData.userDetails) {
this.angularFirestore.doc(userData.userDetails).valueChanges().subscribe(res => {
          userDetails = res;
          console.log(userDetails);
        });
      return { id, ...userDetails }
    }).filter( f => f.organizationId != undefined && f.organizationId == orgId)
  }));
Run Code Online (Sandbox Code Playgroud)
这能够正确地控制结果,但不能返回数据.
可以从数据引用获取数据花费时间并且返回语句执行得更早.
return { id, ...userDetails }在 上订阅之前执行this.angularFirestore
.doc(userData.userDetails).valueChanges()。
订阅内的订阅不是一个好主意,您应该使用其他 pipable 运算符(例如 switchMap)来链接两个调用:
return this.dbCollectionService
.userOrganizationCollection.snapshotChanges()
.pipe(
   map(res => res.map(data => data.payload.doc.data())),
   map(userDatas => userDatas.filter(_ => _)),
   map(userDatas => userDatas.map(this.angularFirestore.doc(userData.userDetails).valueChanges()
                                    .pipe(map(userDetails => ({ id, ...userDetails }))))),
   switchMap(userDatas$ => combineLatest(userDatas$)),
   map(users => users.filter( f => f.organizationId != undefined && f.organizationId == orgId))
);
Run Code Online (Sandbox Code Playgroud)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           150 次  |  
        
|   最近记录:  |