firebase-Angularfire(获取好友列表帖子)

firebase-Angularfire(获取好友列表帖子),firebase,firebase-realtime-database,angularfire2,Firebase,Firebase Realtime Database,Angularfire2,我有一个朋友列表和一个帖子列表,我试图获取一个用户的所有朋友,然后获取所有朋友的帖子 在我的组件中,我获得了一个用户的朋友,然后我将他们传递给我的服务,该服务试图获取帖子 在组件中:_____________ ngOnInit() { firebase.database().ref(`friends/status/${this.userUid}`).orderByChild('request').equalTo('accepted').on("child_added", snapshot =&

我有一个朋友列表和一个帖子列表,我试图获取一个用户的所有朋友,然后获取所有朋友的帖子

在我的组件中,我获得了一个用户的朋友,然后我将他们传递给我的服务,该服务试图获取帖子

在组件中:_____________

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
);

})

}
findAllPosts(activeFriends):Observable<FeedData[]> {

return this.db.list(`posts/${activeFriends}`,{
query: {
orderByChild: 'postTime'
}
}).map( (arr) => { return arr.reverse(); }).map(FeedData.fromJsonArray).do(console.log);

}
这将在控制台中返回朋友的ID

friends Ste8mdpdjrUST6RQxbd4j7KAsFG2​

朋友​ KATWXN5JLLYJ4PMZAOXNYGKRIG2​

我知道这是因为两位朋友的“child_added”回复。如果我有30个朋友,我会得到30个控制台日志


在我传递activeFriends=snapshot.val().friend之后;​

我的服务___________

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
);

})

}
findAllPosts(activeFriends):Observable<FeedData[]> {

return this.db.list(`posts/${activeFriends}`,{
query: {
orderByChild: 'postTime'
}
}).map( (arr) => { return arr.reverse(); }).map(FeedData.fromJsonArray).do(console.log);

}
findAllPosts(activeFriends):可观察{
返回此.db.list(`posts/${activeFriends}`{
查询:{
orderByChild:“postTime”
}
}).map((arr)=>{return arr.reverse();}).map(FeedData.fromJsonArray).do(console.log);
}
在控制台日志中得到的是我这两个朋友的实际帖子(第一个用户有两篇帖子,另一个用户有一篇帖子),但我得到的是不同的帖子​ 数组,因为我从它们传递的键组件会从child_添加触发2次(“查看日志”)

现在在我看来,我总是看到最后一组只有一篇文章的文章


如何组合数组,或者如何以不同的方式传递好友密钥?或者我怎样才能做到这一点呢?

我建议使用
switchMap
combinelateest
。使用AngularFire,这将类似于:

this.postsByFriends$ = this.angularfireDatabase.list(`friends/status/${this.userUid}`)
  .switchMap(
    friends => Observable.combineLatest(
      friends.map(
        friend => this.feedDataService.findAllPosts(friend)));
postsByFriends
现在应该是一个可观察的数组,其中每个元素由一个朋友发布。您可以使用
async
管道在模板中订阅它

[[未测试]]