【问题标题】:get data from 2 sources从 2 个来源获取数据
【发布时间】:2016-03-27 08:19:36
【问题描述】:

我正在使用 Promise 或 Observable 学习编程和异步,这有点难以理解 我有 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

}

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

【问题讨论】:

  • 您可以使用 combineLatest zipwithLatestFrom 之类的东西来组合您的数据。

标签: asynchronous angular rxjs


【解决方案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;
}

【讨论】:

  • 没有让它与您的解决方案一起工作,否则,在我的帖子功能中找到了另一个使用 userRef orderbykey 等于 data.val().user 的解决方案,似乎工作正常
猜你喜欢
  • 1970-01-01
  • 2019-02-05
  • 2015-01-06
  • 1970-01-01
  • 2020-10-23
  • 2020-10-28
  • 2018-08-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多