单个 concatArrayEager 不订阅所有源

Single concatArrayEager doesnt subscribe to all sources

我正在为 android 应用程序编写一些存储库逻辑,我有这个逻辑可以从数据库中检索数据并在之后立即使用来自 api 的数据更新数据库。

   fun fetchData(): Single<Data> {
    return Single.concatArrayEager(
            fetchFromDb(),
            fetchFromApi())
            .firstOrError()
}

顺便说一下 - 数据库是 Room,api 是 Retrofit。现在发生的是房间几乎立即发射,但由于某种原因 api 请求没有被触发 - 第二个 Single 没有启动。

我阅读了有关 eager operator 的文档,但不确定这是否正确。我什至试图延迟数据库获取,大约 20 毫秒——这导致第二个单曲被实际触发

concatArrayEager 应该订阅所有 Observables。但是您的 API 调用可能需要一些时间才能真正开始。这可能比您的数据库调用 return.

所需的时间更多

现在我们看到firstOrError的效果了。当接收到第一个值时,流将终止,并且串联的所有活动或未决订阅都将被取消。 API 结果也永远不会被使用。