rx-java - 使用一个 Observable 为另一个 Observable 计时

标签 rx-java

我们需要根据另一个热可观察值“计时”,例如:

 main:            --(1)-----(2)-----(3)-----(4)-------(5)----(6)------------|
 clock:           -------(X)------------(X)------(X)--------------(X)-------|
______________________________________________________________________________

 expected result: -------(1)(2)-----(3)-(3)-(4)--(4)--(5)----(6)--(6)-------|

更具体地说,每当“时钟”发出一个项目时,另一个可观察的最后一个项目就会再次发出。项目发射会被延迟,直到两个可观察对象都发射了至少一项。 现在,我们通过以下方式实现这一目标:

  <T, U> Observable<T> clock(Observable<T> main, Observable<U> clock) {
    return Observable.combineLatest(main, clock, (mainItem, clockItem) -> mainItem);
  }

这看起来有些愚蠢,因为我们正在应用转换,然后丢弃其中一个输入。此外,我们偶尔会遇到这种解决方案的背压问题。 似乎现有的 Rx 操作符可以执行此操作,但到目前为止我还没有找到正确的 API 方法来执行此操作。 有没有更好、更惯用的方法来使用 RxJava 解决这个问题?

最佳答案

我觉得不错。这并不是说时钟输入尚未使用,因为虽然该值尚未使用,但计时已使用。

为了处理热源上的背压,您可能需要应用 onBackPressureXXX 运算符之一。例如,如果您不想错过输出,请使用 .onBackPressureBuffer()。另一种策略是使用 .throttle.sample

关于rx-java - 使用一个 Observable 为另一个 Observable 计时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32829071/

相关文章:

android - 如何正确处理 RxJava (Android) 中的 onError?

java - 如何有条件地处理 Observable 链中的错误?

java - RxAndroid - 来自多个 Observable 的 1 个响应

java - 在 JWT 用户映射期间创建 Gentics Mesh 用户配置文件节点 - 导致失败

java - rxjava : difference between flatmap and map

java - 使用 ObservableBoolean 或 Observable<Boolean> 组合两个可观察的 boolean 值

android - 使用 RxJava 处理成本高昂的操作

java - 如何将可变参数传递给观察者?

android - 获取变量 "into"RxJava 链供以后使用

java - 在已释放资源后使用 .share() 订阅修改后的可观察对象