我有两个观察对象,它们是从不完成(它们是事件处理程序)。每次可观察到的A发出时,我都想抛弃B的所有发出,等待B发出一个值,并对A的发出进行某种处理;忽略进一步的B排放。如果A再发出一次,则在等待B时,我想取消等待。
当前我有以下代码:
obsA$.subscribe(value => {
obsB$.pipe(take(1)).subscribe(_ => {
if (value) {
// do stuff with value
}
});
});
在以下情况下,此情况不涉及以下情况:A发出一次,然后A再次发出,然后B发出一个值,应该取消对B的第一个订阅,并且应该只执行第二个订阅。
ObservableA是一个导航事件(导航到新地址),而ObsB是来自动画事件的,它在导航之后发生。导航到新地址时,我要等待动画完成,然后执行一些操作。
答案 0 :(得分:2)
您似乎在描述switchMap
,该订阅者始终订阅从其回调返回的Observable并从上一个回调中取消订阅。
obsA$
.pipe(
switchMap(v => obsB$.pipe(mapTo(v))), // pass through only the original emission from obsA$
)
.subscribe(resultFromA => ...);