使用RxJava进行定期请求时如何避免重叠请求

时间:2018-08-02 11:57:01

标签: rx-java reactive-programming rx-java2 reactivex

我想使用RxJava(实际上是RxJava2)来定期发送网络(HTTP)请求。第一次尝试或多或少看起来像这样(改编自source):

Observable.interval(5, TimeUnit.SECONDS, Schedulers.io())
          .map(tick -> sendNetworkRequest())

这将每5秒调用一次sendNetworkRequest。

但是,如果sendNetworkRequest()需要一些时间才能完成(例如,在慢速的网络上,或者有多次重试。),请求将重叠。

我想做的是确保两次请求之间的间隔为5秒,即从上一个请求的结束到下一个请求的开始。

如何使用RxJava做到这一点?

1 个答案:

答案 0 :(得分:1)

使用repeatWhen

    Observable.fromCallable(sendNetworkRequest())
              .repeatWhen(observable -> observable.delay(5, TimeUnit.SECONDS));