【问题标题】:Angularfire rxjs multiple subscriptionsAngularfire rxjs 多个订阅
【发布时间】:2018-09-21 12:07:27
【问题描述】:

我有一个 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()
}

【问题讨论】:

    标签: angular firebase rxjs angularfire2 subscription


    【解决方案1】:

    您可以为此使用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 运算符,但这真的取决于你想做什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-18
      • 2019-04-02
      • 1970-01-01
      • 2020-09-20
      相关资源
      最近更新 更多