Rx 网络轮询并立即获得第一个结果

Rx Network Polling & Immediately getting first result

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

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

    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 秒才能实际发出结果。

有没有一种方法可以将尽快获得第一个结果的想法与安排自己无限期重复的想法结合起来?我的另一个想法是创建两个不同的可观察对象并分别订阅它们,但似乎我遗漏了什么。

您可以从 timer Observable 和 flatMap 网络 observable 开始,而不是从网络 observable 开始并重复它,例如

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