更具体地说,我不想要一组发射物体。我想要任何一个源发出的最后一个对象。
目前,它的工作方式如下
.withLatestFrom(subject1, subject2)
.switchMap([val1, val2]) => {...}
我想要的是
.withLatestFrom(subject1, subject2)
.switchMap(latestVal) => {...}
避免可能的x = y问题。我有两个科目。 Subject1和Subject2。
如果subject2已发出任何值,则该值将始终胜过subject1。在我的用例中,一旦主题2开始发出,该特定模块将忽略主题1.但主题1将在其他地方使用。
但是我想要一种方法来将这两个主题作为源提供,并获得最后一个发射值,或者如果主题2不是空,则获得主题2的最后一个值。如果主题2为null,则从主题1获取最后一个值。
答案 0 :(得分:1)
以下是我认为您正在寻找的例子:
const first = Rx.Observable.interval(1000).map(x => `first (${x})`);
const second = Rx.Observable.interval(2000).map(x => `second (${x})`);
Rx.Observable.merge(
first.takeUntil(second),
second
)
.subscribe(
x => { console.log('next: ', x); },
null,
() => { console.log('complete'); }
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.5.5/Rx.min.js"></script>
takeUntil
将导致“first”observable在第一次“第二次”observable发出时停止为此订阅发出值。