首页 > 解决方案 > RxJava 延迟的懒惰

问题描述

我正在阅读一本讲述如何在遗留阻塞代码中引入 RxJava 的书。

它基本上是这样做的:

Observalbe.defer(() -> {return Observable.from(someBlockingMethodTofetchDBRecords(....))});

它说 defer 会在程序中引入惰性。但默认情况下是不可观察的。Observable.from 应该返回一个 observable 并且在我们订阅它之前它不会做任何事情。那么为什么我们需要 defer 呢?

标签: rx-java

解决方案


因为someBlockingMethodTofetchDBRecords不是懒惰的,你把它的结果交给了Observable之后。

是的,Observable默认情况下 s 是惰性的,因此在订阅之前它们不会执行订阅操作Observer。但是,from的订阅操作是遍历现有序列并发出其值。该序列是在Observable.

因此,如果您需要仅在有Observerfor 时才创建序列本身,则它的创建必须是订阅操作的一部分,而订阅操作是实现defer该操作的操作符。


推荐阅读