【问题标题】:merge two observables array into single observable array将两个 observables 数组合并为一个 observable 数组
【发布时间】:2019-07-24 17:09:30
【问题描述】:

我有一个 Observable 数组 similarIdeasObservable$ 和另一个 Observable 数组,通过 this.ideaService.getSimilarIdeas() 从服务器获取。我想在不使用订阅的情况下合并这两个 Observable 数组。我怎样才能做到这一点?

我正在尝试以下方式

 this.similarIdeasObservable$.pipe(concat(this.ideaService.getSimilarIdeas(this.idea).pipe(
        concatMap(i => i),
        toArray(),
        catchError(error => {
          throw error;
        }),
        finalize(() => {
          this.loading = false;
        })
      )));

concat 已弃用。

【问题讨论】:

  • 我认为,您可以使用combineLatest 来做到这一点
  • @R3tep,你能举个例子吗
  • 你需要解释一下“合并”是什么意思。对于单个可观察对象的每次发射,结果可观察对象将如何发射? concat 也没有被弃用。

标签: angular typescript rxjs


【解决方案1】:

我建议您使用forkJoin

forkJoin 的工作原理是,它需要完成输入的 observables(下例中的 observableAobservableB),并且它最终将用于返回一个由数组表示的 observable,由输入 observables 返回的值组成。

import { forkJoin } from 'rxjs';

const observableA = this.similarIdeasObservable$;
const observableB = this.ideaService.getSimilarIdeas(this.idea);

forkJoin(observableA, observableB);

【讨论】:

  • 在较新的版本中,params args 的 forkJoin 已过时。你应该使用一个数组:forkJoin([observableA, observableB]);
【解决方案2】:

您可以使用merge 来合并多个 observable。

例如

import { merge } from 'rxjs';

const example = merge(
  similarIdeasObservable$,
  this.ideaService.getSimilarIdeas(this.idea)
);

【讨论】:

    猜你喜欢
    • 2020-09-14
    • 2021-07-16
    • 2011-10-29
    • 1970-01-01
    • 1970-01-01
    • 2012-11-19
    • 2012-05-10
    • 2018-04-27
    相关资源
    最近更新 更多