【问题标题】:Rx Network Polling & Immediately getting first resultRx 网络轮询并立即获得第一个结果
【发布时间】:2015-04-15 17:08:22
【问题描述】:

我想从我的应用程序中轮询一项服务,因此我可以定期(约 15 分钟)刷新数据。但是,启动时也需要相同的数据。我正在使用 Retrofit 和 RxAndroid。

我可以轻松地立即获取网络数据(或者在调用返回时),并且我一直在努力进行这样的重复调用:

    return mNetworker.getInitializationProperites(deviceId)
            .observeOn(Schedulers.io()) // database i/o will need done
            .subscribeOn(Schedulers.io())
            .delay(20L, TimeUnit.SECONDS) // 20 seconds for testing
            .repeat()
            .subscribe(onNext, RxErrorHandler.handle(), onComplete);

此方法(以及其他使用timerinterval 的方法)获得正确的时间间隔,但传递结果较晚。特别是,在上面,我知道 web 服务会立即被命中,但它会等待 20 秒才能真正发出结果。

有没有一种方法可以结合尽快获得第一个结果的想法并安排自己无限期地重复?我的另一个想法是创建两个不同的可观察对象并分别订阅它们,但似乎我错过了一些东西。

【问题讨论】:

    标签: retrofit rx-java


    【解决方案1】:

    您可以从 timer Observable 和 flatMap it 与网络 observable 开始,而不是从网络 observable 开始并重复它,类似于

    Observable.timer(0L, 20L, TimeUnit.SECONDS).flatMap(i -> doNetworkRequest())
    

    【讨论】:

    • 该死,我不敢相信我错过了那个版本的timer。它一直盯着我的脸。 Docs 给有兴趣的人。
    猜你喜欢
    • 2021-04-26
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    • 2018-06-25
    • 1970-01-01
    相关资源
    最近更新 更多