【问题标题】:Using one Observable to clock another Observable使用一个 Observable 为另一个 Observable 计时
【发布时间】:2015-09-29 04:53:21
【问题描述】:

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

 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 解决这个问题?

【问题讨论】:

    标签: rx-java


    【解决方案1】:

    我觉得不错。并不是没有使用clock 输入,因为虽然没有使用该值,但时间已经使用了。

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

    【讨论】:

    • 是的,我们也在使用 onBackpressureBuffer()。感谢您确认这确实是实现这一目标的最直接方法。
    猜你喜欢
    • 1970-01-01
    • 2019-01-23
    • 2021-10-21
    • 2021-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多