从2个来源获取数据

时间:2016-03-27 08:19:37

标签: asynchronous angular rxjs

我使用承诺或可观察的方式学习编程和异步,并且有点难以理解 我有2个数据源,帖子(用户ID发布了它)和用户,我想要实现的只是显示帖子与一些用户信息,如图像,名称等,我该怎么办?

这就是我获取资料的方式:

  allUsers() {
    return new Promise((resolve, reject) => {
      this.rootRef.child('users').once('value', snapshot => {
        const data = snapshot.val()
        const users = Object.keys(data).map(id => new User(id, data[id]))
        resolve(users)
      })
    })
  }

发布帖子

  allPosts(): Subject<Post[]> {
const postsObservable = new BehaviorSubject<Post[]>(null)

this.rootRef.child('posts').on('value', snapshot => {
  const data = snapshot.val()
  const posts = Object.keys(data)
    .map(id => new Post(id, data[id]))
    .sort((lhs, rhs) => rhs.date.getTime() - lhs.date.getTime())

  postsObservable.next(posts)
})

return postsObservable

}

当用户发布内容时,是否需要添加图像和名称等用户数据,或者是否可以这样做。

1 个答案:

答案 0 :(得分:1)

收到帖子后,我会调用你的getUsers方法。这样你就可以获得两种数据。在将用户提示设置为帖子之后,您将调用下一个方法:

allPosts(): Subject<Post[]> {
  const postsObservable = new BehaviorSubject<Post[]>(null)

  this.rootRef.child('posts').on('value', snapshot => {
    const data = snapshot.val()
    const posts = Object.keys(data)
      .map(id => new Post(id, data[id]))
      .sort((lhs, rhs) => rhs.date.getTime() - lhs.date.getTime())

    this.getUsers().then(users) => {
      posts.forEach((post) => {
        // Set user hints into posts
      });
      postsObservable.next(posts);
    });
  });

  return postsObservable;
}