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 次 |
| 最近记录: |