我有一个朋友列表和一个列表帖子,我试图获取用户的所有朋友,然后获取朋友的所有帖子。
在我的组件中,我找到了用户的朋友,然后我将它们传递给我试图获取帖子的服务。
在组成部分:_____________
ngOnInit() {
firebase.database().ref(`friends/status/${this.userUid}`).orderByChild('request').equalTo('accepted').on("child_added", snapshot =>{
const activeFriends = snapshot.val().friend;
console.log("friends", activeFriends);
this.feedDataService.findAllPosts(activeFriends)
.subscribe(
data => this.posts$ = data
);
})
}
这将在控制台中返回朋友的ids
朋友Ste8mdpdjrUST6RQxbd4j7KAsFG2朋友katwxN5JllYJ4PmzAoXnYygKrIg2
我知道这是因为" child_added"归还了2个朋友。如果我有30个朋友,我会得到30个控制台日志。
我传递了activeFriends = snapshot.val()。friend;
我的服务___________
findAllPosts(activeFriends):Observable<FeedData[]> {
return this.db.list(`posts/${activeFriends}`,{
query: {
orderByChild: 'postTime'
}
}).map( (arr) => { return arr.reverse(); }).map(FeedData.fromJsonArray).do(console.log);
}
回到控制台日志中的是我拥有的这2个朋友的实际帖子(第一个用户有2个帖子,另外1个帖子),但是我将它们放在不同的数组中,因为密钥我从child_added传递了两次组件触发器(&#34;查看日志&#34;)
console log the arrays of posts of 2 friends
现在在我看来,我总能看到最后一列帖子只有一个帖子
如何组合数组,或者如何以不同的方式传递朋友键?或者我怎样才能做到这一点?
答案 0 :(得分:0)
我建议使用switchMap
和combineLatest
。使用AngularFire,这将是:
this.postsByFriends$ = this.angularfireDatabase.list(`friends/status/${this.userUid}`)
.switchMap(
friends => Observable.combineLatest(
friends.map(
friend => this.feedDataService.findAllPosts(friend)));
postsByFriends
现在应该是一个可观察的数组,其中每个元素都是一个朋友的帖子。您可以使用async
管道在模板中订阅它。
[[未测试]]