从Firebase RTDB查询特定的数据列表?

时间:2018-04-24 16:42:15

标签: angular firebase firebase-realtime-database rxjs behaviorsubject

有没有更好的方法来查询Firebase RTDB中的特定数据集?我能想到的就是使用forEach()并在每个可观察的可观察量上推送到subscribe内的BehaviorSubject。让我知道!我已经坚持了一段时间。

hits = new BehaviorSubject([]);

territories = ['16830', '16832', '16838'] // Zip Codes

getTerritories(territories) {
    territories.forEach(key => {
      this.db.object(`locations/${key}`).snapshotChanges()
      .map(zip => zip.payload.val())
      .subscribe(zip => {
        let currentHits = this.hits.getValue();
        currentHits.push(zip);
        this.hits.next(currentHits);
      });
    });
   }

this.hits.subscribe(res => console.log(res));

1 个答案:

答案 0 :(得分:1)

您可以使用Observable.forkJoin()

Observable.forkJoin(
    //this returns an array of observables.
    territories.map(key => this.db.object(`locations/${key}`)
        .map(zip => zip.payload.val()))
)
    .subscribe(res => console.log(res));

请注意Observable.forkJoin接受一个observable数组,并在发出一个值之前并行触发它们,等待所有它们完成。