Firebase Multiple加入AngularFire2

时间:2017-08-15 23:02:35

标签: angular firebase angularfire2

我有以下firebase数据结构:

firebase-database-1234:
  user_keywords (list)
    keyword_a
    keyword_b

  keywords (object)
    keyword_a
      name
    keyword_b
      name

  keyword_posts (list)
    keyword_a
      postkey1
      postkey2
      postkey3
    keyword_b
      postkey4
      postkey5

  posts (object)
    postkey1
      date_time
      title
      etc
    postkey2
      date_time
      title
      etc
    postkey3
      date_time
      title
      etc
    postkey4
    postkey5

基本上我要做的是拥有一个用户拥有用于检索帖子的标签或关键字的结构。每个user_keywords节点都有用户选择的关键字。我需要获取在关键字节点中匹配的所有关键字,以便我可以获取名称属性等。

然后我需要从keyword_posts节点获取与用户选择的关键字匹配的帖子列表。

然后我遍历每个post key属性并从posts节点获取实际的post数据。

我知道如何使用嵌套订阅和数组来做到这一点。但我真正想要的是一系列的observable,所以我基本上可以有一个observable订阅使用异步管道来获取帖子。

就我已经使用当前的数据结构而言:

getKeywordsByUser(userId: string): Rx.Observable<any[]> {
  return this.af.list(`users/${userId}/filters_incoming/keywords`)
    .map(user_keywords => {
      return user_keywords.map(ukw => {
        return this.af.object(`keywords/${ukw.$key}`);
      })
    })
    .flatMap(res => Rx.Observable.combineLatest(res));
}

getPostsByKeywords(userId: string): Rx.Observable<any[]> {
  this.keywords = [];
  return this.getKeywordsByUser(userId)
    .map(keywords => {
      return keywords.map(keyword => {
        this.keywords.push(keyword.name);
        return this.af.list(`keyword_posts/keywords/${keyword.$key}/posts`, {
          query: {
            limitToLast: 33,
            orderByKey: true
          }
        })
        .map(post_keys => {
          return post_keys.map(post_key => {
            return this.af.object(`posts/${post_key.$key}`)
        });
      });
    });
  })
    .flatMap(res => Rx.Observable.combineLatest(res));
}

this.getPostsByKeywords(this.user.uid)
  .subscribe(sub => {
    console.log('sub = ', sub);
  });

它返回一个数组数组:

sub =(2)[Array(1),Array(8)] 0:[FirebaseObjectObservable] 1:(8)[FirebaseObjectObservable,FirebaseObjectObservable,FirebaseObjectObservable,FirebaseObjectObservable,FirebaseObjectObservable,FirebaseObjectObservable,FirebaseObjectObservable,FirebaseObjectObservable] length:2__proto__:阵列(0)

0 个答案:

没有答案