我正在尝试加入两个可观察的流以创建一个我也可以订阅的新流。两个输入流均返回对象数组。我试过使用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;
});
但是,这似乎没有达到预期的效果。我也尝试了水龙头。正确的方法是什么?
答案 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),在这种情况下,我建议您使用combineLatest
或forkJoin
,具体取决于输入观测值的类型
forkJoin-完成所有可观察值后,从每个可观察值中发出最后一个发出的值。
combileLatest-当任何可观察对象发出一个值时,则从每个观察对象中发出最新的值
注意:ngrx选择器未完成,如果您观察到的输入是ngrx选择器,请使用combineLatest