RxJava defer 的惰性
Laziness with RxJava defer
我正在阅读一本讲述如何在遗留阻塞代码中引入 RxJava 的书。
它基本上是这样做的:
Observalbe.defer(() -> {return Observable.from(someBlockingMethodTofetchDBRecords(....))});
它说 defer 会在程序中引入惰性。但是默认情况下不是 Observable 惰性的。 Observable.from 应该 return 一个 observable 并且在我们订阅它之前它不会做任何事情。那么为什么我们需要在这里延迟?
因为 someBlockingMethodTofetchDBRecords
不是懒惰的,你把它的结果交给 Observable
之后。
是的,Observable
默认情况下是惰性的,因此在 Observer
订阅之前它们不会执行订阅操作。但是,from
的订阅操作是迭代 现有的 序列并发出其值。该序列是在 Observable
.
之外传递并创建的
因此,如果您需要仅在存在 Observer
时才创建序列本身,则其创建必须是订阅操作的一部分,其中 defer
是实现这一目标的运营商。
我正在阅读一本讲述如何在遗留阻塞代码中引入 RxJava 的书。
它基本上是这样做的:
Observalbe.defer(() -> {return Observable.from(someBlockingMethodTofetchDBRecords(....))});
它说 defer 会在程序中引入惰性。但是默认情况下不是 Observable 惰性的。 Observable.from 应该 return 一个 observable 并且在我们订阅它之前它不会做任何事情。那么为什么我们需要在这里延迟?
因为 someBlockingMethodTofetchDBRecords
不是懒惰的,你把它的结果交给 Observable
之后。
是的,Observable
默认情况下是惰性的,因此在 Observer
订阅之前它们不会执行订阅操作。但是,from
的订阅操作是迭代 现有的 序列并发出其值。该序列是在 Observable
.
因此,如果您需要仅在存在 Observer
时才创建序列本身,则其创建必须是订阅操作的一部分,其中 defer
是实现这一目标的运营商。