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

时间:2017-06-07 12:19:45

标签: firebase firebase-realtime-database angularfire2

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

在我的组件中,我找到了用户的朋友,然后我将它们传递给我试图获取帖子的服务。

在组成部分:_____________

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

现在在我看来,我总能看到最后一列帖子只有一个帖子

The array I display in view

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

1 个答案:

答案 0 :(得分:0)

我建议使用switchMapcombineLatest。使用AngularFire,这将是:

this.postsByFriends$ = this.angularfireDatabase.list(`friends/status/${this.userUid}`)
  .switchMap(
    friends => Observable.combineLatest(
      friends.map(
        friend => this.feedDataService.findAllPosts(friend)));

postsByFriends现在应该是一个可观察的数组,其中每个元素都是一个朋友的帖子。您可以使用async管道在模板中订阅它。

[[未测试]]