【问题标题】:RxJs: Filter content in observable using emission of another observableRxJs:使用另一个可观察对象的发射过滤可观察对象中的内容
【发布时间】:2020-09-25 11:22:59
【问题描述】:

我有一个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 的过滤运算符。

【问题讨论】:

    标签: rxjs


    【解决方案1】:

    考虑让内部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()
    )
    

    【讨论】:

      猜你喜欢
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-23
      相关资源
      最近更新 更多