Rxjs 从多个源获取最后发射的对象

Rxjs 从多个源获取最后发射的对象,rxjs,Rxjs,更具体地说,我不想要发射对象的数组。我想要由任一源发射的最后一个对象 目前,它是这样工作的 .withLatestFrom(subject1, subject2) .switchMap([val1, val2]) => {...} 我想要的是 .withLatestFrom(subject1, subject2) .switchMap(latestVal) => {...} 以避免可能的x=y问题。我有两门课。主题1和主题2 如果subject2发出了任何值,该值将始终优于sub

更具体地说,我不想要发射对象的数组。我想要由任一源发射的最后一个对象

目前,它是这样工作的

.withLatestFrom(subject1, subject2)
.switchMap([val1, val2]) => {...}
我想要的是

.withLatestFrom(subject1, subject2)
.switchMap(latestVal) => {...}
以避免可能的x=y问题。我有两门课。主题1和主题2

如果subject2发出了任何值,该值将始终优于subject1。在我的用例中,一旦主题2开始发射,这个特定模块将忽略主题1。但主题1将在其他地方使用


但是我想要一种方法,将这两个主题作为源提供,或者获取最后发出的值,或者获取主题2的最后一个值(如果不是null)。如果subject 2为空,则从subject 1获取最后一个值。

以下是一个我认为符合您要求的示例:

const first=Rx.Observable.interval(1000.map)(x=>`first(${x})`);
const second=Rx.Observable.interval(2000).map(x=>second(${x})`);
可观察合并(
第一,直到(第二),
第二
)
.订阅(
x=>{console.log('next:',x);},
无效的
()=>{console.log('complete');}
);

那是我的错。我错过了一个细节。应用程序的其他部分将使用另一个可观察值。所以我不想让它停止发射。但是对于这个特殊的用途,我想把两个观测值合并成一个。我有它的工作,但它的草率和不真正可重复使用。@Smeegs我认为它做什么你想要的。
takeUntil
操作符将停止该订阅的第一个可观察对象继续发射。如果您有其他活动订阅,则他们将继续接收来自第一个可观察对象的值。明白了。我想这应该能满足我的需要。谢谢最后一个问题。合并将不会影响任何其他订阅服务器的任何可观察。它只会创建一个新的可观察对象,对吗?@Smeegs是的,它不会直接影响对第一个或第二个可观察对象的订阅。