使用一个可观察对象来给另一个可观察对象时钟



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

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

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

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

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

看起来不错。并不是说clock的输入没有被使用,因为虽然这个值没有被使用,但是时序已经被使用了。

对于处理热源上的背压,您可能需要应用onBackpressureXXX操作符之一。例如,如果你不想错过输出,那么使用.onBackpressureBuffer()。另一种策略是使用.throttle.sample

相关内容

  • 没有找到相关文章

最新更新