我的数据库中有两个节点-一个是allUsers
,另一个是usersChildren
。
例如:
allUsers: { user1: {...}, user2: {...}}
usersChildren: { user1: {...} }
在这种情况下,user1
有子数据,而user2
没有子数据。
我想检索所有用户对象的列表,并希望在每个用户对象内添加usersChildren
节点(如果有)中的子数据。
但是,我对如何做到这一点并不十分熟悉。我已经尝试了以下方法,但这导致仅获得儿童信息,而没有获得 具有子级信息和用户元数据的组合对象。
this.af.getObservable(`allUsers`).pipe(map(allUsers =>
allUsers.map(user => this.af.getObservable(`usersChildren/${user.id}`)))
.subscribe(allUsersData => this.userList = allUsersData);
实现我想要的最好的方法是什么?
答案 0 :(得分:0)
尝试一下
this.af.getObservable(`allUsers`)
.pipe(
mergeMap(users => forkJoin(
users.map(user => this.af.getObservable(`usersChildren/${user.id}`))
))
);
您进行HTTP调用以获取所有用户,然后使用forkJoin
对每个用户进行1次调用。感谢Array.map
进行呼叫,该呼叫将您的用户转换为HTTP呼叫。
现在您可以像这样订阅它
this.myService.getAllUsers().subscribe(users => { console.log(users); });
答案 1 :(得分:0)
在您的情况下,我会使用 concat 运算符。
Concat会将两个可观察对象合并为一个组合序列,但是第二个可观察对象将在第一个可观察对象完成之前开始发射。
示例:
let first = Observable.timer(10,500).map(r => {
return {source:1,value:r};
}).take(4);
let second = Observable.timer(10,500).map(r => {
return {source:2,value:r};
}).take(4);
first.concat(second).subscribe(res => this.concatStream.push(res));