【问题标题】:How to avoid overlapping requests when doing periodic requests with RxJava使用 RxJava 进行定期请求时如何避免重叠请求
【发布时间】:2018-08-02 11:57:01
【问题描述】:

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

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

这将每 5 秒调用一次 sendNetworkRequest。

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

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

如何使用 RxJava 实现这一点?

【问题讨论】:

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


    【解决方案1】:

    使用repeatWhen

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

    【讨论】:

    • 太棒了。这正是我所需要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 2012-10-27
    • 2013-11-13
    • 2020-08-18
    相关资源
    最近更新 更多