单个 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 结果也永远不会被使用。
我正在为 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 结果也永远不会被使用。