【问题标题】:Concat two observables into one observable so that values get fired on one observable only将两个可观察对象合并为一个可观察对象,以便仅在一个可观察对象上触发值
【发布时间】:2020-02-11 23:10:08
【问题描述】:

我想加入两个从 httpservice 返回的 T[] 类型的 observable。

我尝试了 forkjoin 和 zip,但它们返回一个 [T[], T[]] 类型的 Observable,我想返回一个 T[] 类型的对象,如下面的代码所示。 有没有办法在 Angular 7 中做到这一点?

请帮助我在工作中需要这个。

public getSelectFlux(value): Observable<SelectAutocompleteModel[]> {
  if (!this.isFluxAuto) {
    return forkJoin(this.selectAutoCompleteService.selectedFlux(
      this.getInstance(value, false)), this.selectAutoCompleteService.selectedFlux(this.getInstance(value, true)));
  }
  return this.selectAutoCompleteService.selectedFlux(this.getInstance(value, false));
}

【问题讨论】:

  • 不确定您要做什么,但 rxjs 中还有很多方法可能 combineLatest 听起来更像可以在这里使用的东西learnrxjs.io/operators/combination/combinelatest.html
  • 非常不清楚的问题...Observable &lt;[T[], T[]]&gt;&gt; 的类型为Observable
  • 我想得到 Observable + Observable = Observable 并且 zip 和 forkjoin 返回一个 Observable 不是我想要的

标签: angular typescript rxjs angular7


【解决方案1】:

您需要一个merge 运算符。合并运算符将合并两个可观察对象并返回单个可观察对象,两个可观察值都将被触发。

您的代码将如下所示:

public getSelectFlux(value): Observable<SelectAutocompleteModel[]> {
  if (!this.isFluxAuto) {
    return merge(
      this.selectAutoCompleteService.selectedFlux(this.getInstance(value, false)),
      this.selectAutoCompleteService.selectedFlux(this.getInstance(value, true))
    )
  }
  return this.selectAutoCompleteService.selectedFlux(this.getInstance(value, false));
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多