Angularfire rxjs 多个订阅

Angularfire rxjs multiple subscriptions

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

我循环遍历包含搜索查询端点的列表,然后调用查询 firebase 和 returns 集合的搜索函数。我觉得这不是对 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()
}

您可以为此使用 forkJoinzip

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

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

然而,forkJoin 运算符要求所有源 Observable 完成,这可能与 valueChanges() 不同,因此您可以将每个 Observable 链接到 take(1)

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

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

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

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