Angularfire rxjs多个订阅

时间:2018-04-11 14:34:50

标签: angular firebase rxjs angularfire2 subscription

我有一个angularfire函数,可以在Firestore中查询有很多可能集合的集合。

我遍历包含搜索查询端点的列表,然后调用查询firebase并返回集合的搜索函数。我觉得这不适合使用RXJS。

目前,循环在每个循环上订阅一个新的firebase观察者。我觉得这不是最佳做法,可以更好地完成。

有没有办法创建一个订阅但仍然传递所有下载的数据?

for (let item of list) {
    searchMap('enpoint')
      .subscribe((data) => {
        this.skillResults = this.skillResults.concat(data);
      })
  }
}

searchMap(endpoint) {
    return return this.angularfire.collection('bucket/' + endpoint).valueChanges()
}

1 个答案:

答案 0 :(得分:1)

您可以使用forkJoinzip

const observables = list.map(item => searchMap('enpoint'));

Observable.forkJoin(observables).subscribe(...)

但是,forkJoin运算符需要完成所有源Observable,这可能与valueChanges()不同,因此您可以使用take(1)链接每个Observable。

const observables = list.map(item => searchMap('enpoint').take(1));

如果您希望源Observables发出相同数量的项目,您可以使用zip

Observable.zip(...observables).take(1).subscribe(...)

也许还要查看combineLatest运算符,但这实际上取决于您想要做什么。