我有两个可观察对象,永远不会完成(它们是事件处理程序)。每次可观察的 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 来自动画事件,发生在导航之后。当导航到新地址时,我想等待动画完成,然后执行某些操作。
最佳答案
看起来您正在描述 switchMap
它总是订阅从回调返回的 Observable,并取消订阅前一个 Observable。
obsA$
.pipe(
switchMap(v => obsB$.pipe(mapTo(v))), // pass through only the original emission from obsA$
)
.subscribe(resultFromA => ...);
关于javascript - 取消订阅,当两个 observable 互相订阅时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53208730/