rxjs合并在angular5中没有按预期工作

问题描述 投票:0回答:1
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/merge';

this.events = this.availableHoursCollection.valueChanges()
this.bla = this.afs.collection<AvailableHour>('users')
  .doc('G2loKLqNQJUQIsDmzSNahlopOyk1').collection('availableHours');

this.test = this.bla.valueChanges();


this.something = Observable.merge(
  this.events,
  this.test
)

this.something只有最后一个可观察的项目,我该如何组合它们? 此外,如果您有具有相同值id的observable,您如何合并这些值?

javascript angular typescript merge rxjs
1个回答
2
投票

使用AngularFire测试台,我运行了Rx场景

const merged = Observable.merge(o1, o2)

我得到了一个发出两次的observable,每个发出包含一个数组,这是每个查询的结果。

这让我想知道你是如何检查输出的。如果使用异步管道{{ results | async }}连接到模板,那么第二个发射将覆盖第一个并且给人的印象是只有第二个发出。

如果你很清楚这一点,请道歉。

如果需要组合两个阵列的单个发射,有许多方法可以实现。这种情况最好的是combineLatest()

const combined = Observable.combineLatest(o1, o2)
  .map(([s1, s2]) => [...s1, ...s2])

这是最好的原因是因为.valueChanges()旨在不断推动变革,所以它永远不会完成。所以基于forkJoin()或。的方法

Observable.merge(o1.mergeMap(x => x), o2.mergeMap(x => x)).toArray()

两者都需要一个已完成的事件来发射任何东西,而combineLatest()则不会,并且当其中一个源更新时,组合的observable将再次发出。

© www.soinside.com 2019 - 2024. All rights reserved.