彼此订阅两个可观察对象时取消订阅

时间:2018-11-08 13:28:21

标签: javascript angular rxjs observable

我有两个观察对象,它们是从不完成(它们是事件处理程序)。每次可观察到的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是来自动画事件的,它在导航之后发生。导航到新地址时,我要等待动画完成,然后执行一些操作。

1 个答案:

答案 0 :(得分:2)

您似乎在描述switchMap,该订阅者始终订阅从其回调返回的Observable并从上一个回调中取消订阅。

obsA$
 .pipe(
    switchMap(v => obsB$.pipe(mapTo(v))), // pass through only the original emission from obsA$
  )
  .subscribe(resultFromA => ...);