加入2个或更多Firebase Observable

时间:2016-12-21 15:41:53

标签: javascript angular firebase firebase-realtime-database angularfire2

我正在尝试构建一个由FirebaseObjectObservable构成的Observable,但首先我必须查询Firebase列表以获取该FirebaseObjectObservable的每个键ID。

我的数据结构

players {
   player_1 {
      carsKeys: {
         car_id_1: true,
         car_id_2: true,
         car_id_3: true
         .....
      }
   },
   player_2 {
      ...
   }
}

cars {
   car_id_1 {
      property_1 : '123',
      property_2 : '456',
      ...
   },
   car_id_2 {
      ...
   }
   ...
}

我希望只订阅一个Observable并获得与此类似的对象数组:

cars: Array[5]: [
                  {
                    id: car_id_1,
                    property_1 : '123',
                    property_2 : '456',
                    ...
                  },
                  {
                    id: car_id_2,
                    .....
                  },
                  ....
                 ]

我的服务功能如下:

 public getCars(player_id){
    return this.db.list('players/' + player_id + '/carsKeys/')
           .map(carsKeys => carsKeys
                .map(key => this.db.object('cars/' + key)))
           .flatMap(carsObjs => Observable.combineLatest(carsObjs))
 }

我尝试了很多组合,但没有任何效果:我需要这个数据结构,我还需要与数据库同步。

1 个答案:

答案 0 :(得分:0)

让我们看看我的问题是否正确。

  1. 从玩家选择的玩家获取车钥匙
  2. 将车钥匙转换为数组以便于操作
  3. 将车钥匙数组隐藏到单个可观察流
  4. 从汽车表中获取每辆车的钥匙细节
  5. 将其设为车钥匙阵列
  6. 这是代码示例。用firebase查询替换这些查询部分 https://jsbin.com/hokayilulu/edit?js,console,output

    const players$ = Rx.Observable.of(players)
      .map(x => players[Object.keys(x).find(x=> x === 'player_1')])
      .map(x => Object.keys(x.carsKeys))
      .switchMap(x => Rx.Observable.from(x))
      .map(x => cars[x]);
    
    let result = []
    players$.subscribe(x => {
      result.push(x);
      console.log(result)
    })