javascript - 结合两个可观察对象,其中一个是可选的

标签 javascript rxjs

我有两个需要合并的可观察对象。

observA: | ----- A B C D E ---------------------------F G H------>
observB: | ------------------X ---------------X-------------X---->
         =========================================================
result:  |-------------------A----------------<NULL>--------F---->

             |---- part A ----|         |- part B --|

A 部分 或任何 部分 将在 100 毫秒窗口内发生。 部分 之间的时间要长得多。换句话说:如果 observB 发出一个项目,它应该在有或没有 observB 值的情况下继续但是如果 observA 发出,它应该等待 observB

所以,到目前为止,我所拥有的只是A部分的解决方案

| ----- A B C D E -------->
| ------------------X ---->
===========zip===============
|-------------------A----->


Observable.zip(
    observA$.throttle(100),
    observB$, (a, b => a)
   .subscribe(...)

它不适用于 part B,因为它将等待 observA。我不确定如何用 RxJS 解决这个问题,所以会有任何帮助。也许我不应该只对 RxJs 这样做。任何帮助将不胜感激

更新:Solution ,感谢@martin

最佳答案

听起来你可以按照这些思路使用一些东西:

Observable.defer(() => {
    return observA$.withLatestFrom(observB$.take(1).startWith(null), v => v)
  })
  .take(1)
  .repeat()
  .subscribe(...);

它总是从 observB$ 获取第一个值,然后一直等到发射 observA$。然后它用 take(1).repeat() 重复这个过程。

关于javascript - 结合两个可观察对象,其中一个是可选的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46792932/

相关文章:

javascript - 如何使用 React 在 Meteor 1.5.2 上进行分页?

javascript - WooCommerce - 如何禁用属性选项菜单,直到选择上面的菜单?

javascript - rxjs 去抖和间隔

angular - 如何使用最新的 Rxjs 版本实现 http post 超时?

angular - RxJS 缓存并使用 shareReplay 刷新

angular - catchError 从 web-api 返回错误 500 时不起作用

angular - valueChanges observable 似乎在订阅之前订阅了数据

javascript - 如何从 Python 执行 JavaScript 代码?

javascript - ThreeJS通过id获取元素(Mesh)

php - 只缓存最新版本的javascript文件