代码之家  ›  专栏  ›  技术社区  ›  user3024827

Angularfire rxjs多个订阅

  •  1
  • user3024827  · 技术社区  · 8 年前

    我有一个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 回复  |  直到 8 年前
        1
  •  1
  •   martin    8 年前

    你可以使用 forkJoin zip 为此:

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

    然而 分叉连接 运算符要求完成所有源观测值,这可能与 valueChanges() 所以你可以用 take(1)

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

    或者您可以使用 拉链 如果您希望源可观察对象发出相同数量的项目:

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

    也许还可以看看 combineLatest 但这取决于你想做什么。