javascript - 取消订阅,当两个 observable 互相订阅时

标签 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 来自动画事件,发生在导航之后。当导航到新地址时,我想等待动画完成,然后执行某些操作。

最佳答案

看起来您正在描述 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/

相关文章:

node.js - Phantom.js 填写字段,点击提交,现在卡在访问下一页

angular - 使用 Angular 4.3 的 HttpInterceptor 拦截 HTTP 响应头

node.js - undefined 不可迭代(无法读取属性 Symbol(Symbol.iterator))

Angular2 NGRX 调度时出现性能问题?

Angular2/Rxjs : 'catch' on observable giving ProgressEvent instead of json from response

javascript - 在 Promise 执行器中访问 JS Promise .then()

javascript - 如何从href值获取明确的url?

javascript - Ember.js:这些 .pushObject() 调用是同义的吗?

javascript - Concat 可观察量重用以前的结果

javascript - 使用combineLatest刷新列表: Angular2 + RxJS