Ngrx,Rxjs-合并可观察流并返回新流

时间:2019-05-18 18:16:11

标签: angular typescript rxjs ngrx

我正在尝试加入两个可观察的流以创建一个我也可以订阅的新流。两个输入流均返回对象数组。我试过使用forkJoin运算符和管道映射,然后像这样订阅:

forkJoin(
  this.firstObservable$,
  this.secondObservable$
).pipe(
  map(([first, second]) => {
    // here create a new array array = [] and push new Object { first.something, second.something
    // return newArray
  }
  })
).subscribe((data: any) => {
  this.data = data;
});

但是,这似乎没有达到预期的效果。我也尝试了水龙头。正确的方法是什么?

2 个答案:

答案 0 :(得分:1)

ForkJoin本身返回一个可观察的对象,您可以订阅它作为

forkJoin([
  this.firstObservable$,
  this.secondObservable$
]).subscribe(res => {
    //res[0] is the result emitted for the first observable
});

,您无需使用map尝试合并它们

答案 1 :(得分:1)

Rxjs提供了几种用于合并流的运算符(您可以找到此运算符的列表here),在这种情况下,我建议您使用combineLatestforkJoin,具体取决于输入观测值的类型

forkJoin-完成所有可观察值后,从每个可观察值中发出最后一个发出的值。

combileLatest-当任何可观察对象发出一个值时,则从每个观察对象中发出最新的值

注意:ngrx选择器未完成,如果您观察到的输入是ngrx选择器,请使用combineLatest