如何在不多次调用的情况下从同一个observable返回不同的值?我打算只订阅一次firstObs$,但返回值和sumFromValues。
combineLatest([
this.firstObs$,
this.firstObs$.pipe(
switchMap(someOperation => {
return this.observableSumOperation(someOperation.first, someOperation.second)
})
),
this.anotherObservable$,
])
.subscribe(([values, sumFromValues, anotherValues]) => {
}
2条答案
按热度按时间wh6knrhe1#
正如您所注意到的,当您在
combineLatest
中包含相同的源可观察值时,“combinelatest observable”将发出多次。通常这是不期望的。我可以想到两个解决方案:
1.使用
debounceTime(0)
抑制在同一事件循环中发生的发射:1.在
combineLatest
中只包含一次每个源,并使用map
构建一个包含派生值的新数组/对象:下面是一个StackBlitz,它显示了问题和解决方案。
pprl5pva2#
由于您没有指定
anotherObservable
包含什么以及它的行为方式,因此很难说如何最好地合并这些值。但有一个想法是将可观测量的组合分为两个步骤:1.将
firstObs$
结果与observableSumOperation
Map在一起1.将
calculated$
与anotherObservable$
合并:请注意,
combineLatest
只有在everyobservable至少发出一次时才会触发。因此,如果anotherObservable$
不发出值,则不会输入subscribe方法