RxJs:使用发射另一个可观察物来过滤可观察物的内容

时间:2020-09-24 20:06:19

标签: rxjs

我有一个Observable<Project>返回一个对象数组。我需要根据使用对象ID从请求中构造的Observable<boolean>来过滤此数组。

下面的代码行中有一些内容,但是我需要数组中的实际对象,而不是我当前也映射它们的布尔数组。我猜想在最初的Observable已承诺将两个值都加入后,我可以在zip行中使用某些东西,以便可以在过滤器中使用它们。

    this.projectService.getCurrentUserProjects().pipe(
      mergeAll(),
      mergeMap((project) => this.getProjectConditions(project.id)),
      filter((condition) => condition),
      toArray()
    )

我目前的潜在客户是:

  1. 一种让我在过滤器层之后访问mergeAll所赋予的值的方法,让我将其收集到数组中。
  2. 我做一个concatMap的方法,该方法可同时返回两个值的observable,因此我可以在过滤器层使用它。
  3. 某种接受Observable的过滤器运算符。

1 个答案:

答案 0 :(得分:2)

请考虑使用内部map作为数组返回两个值(数据和条件),如下所示:

this.projectService.getCurrentUserProjects().pipe(
  mergeAll(),
  mergeMap((project) => this.getProjectConditions(project.id).pipe(map(condition => [project, condition]))),
  filter(([,condition]) => condition), // <= only destruct second parameter 
  map(([project]) => project), // <= only destruct first parameter 
  toArray()
)