繁体   English   中英

rxjs合并无法在angular5中按预期工作

[英]rxjs merge not working as expected in angular5

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,那么如何合并这些值?

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

const merged = Observable.merge(o1, o2)

我得到了一个可观察对象,它发出两次,每个发出包含一个数组,这是每个查询的结果。

这使我想知道您如何检查输出。 如果使用异步管道{{ results | async }} {{ 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就会再次发出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM