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
管道在模板中订阅它
[[未测试]]