rx-java - RxJava 延迟的懒惰
问题描述
我正在阅读一本讲述如何在遗留阻塞代码中引入 RxJava 的书。
它基本上是这样做的:
Observalbe.defer(() -> {return Observable.from(someBlockingMethodTofetchDBRecords(....))});
它说 defer 会在程序中引入惰性。但默认情况下是不可观察的。Observable.from 应该返回一个 observable 并且在我们订阅它之前它不会做任何事情。那么为什么我们需要 defer 呢?
解决方案
因为someBlockingMethodTofetchDBRecords
不是懒惰的,你把它的结果交给了Observable
之后。
是的,Observable
默认情况下 s 是惰性的,因此在订阅之前它们不会执行订阅操作Observer
。但是,from
的订阅操作是遍历现有序列并发出其值。该序列是在Observable
.
因此,如果您需要仅在有Observer
for 时才创建序列本身,则它的创建必须是订阅操作的一部分,而订阅操作是实现defer
该操作的操作符。
推荐阅读
- javascript - 仅使 v-list 内的按钮可点击,同时禁用 v-list-item 内容
- amazon-web-services - 为什么即使禁用了 KMS 密钥,我仍然能够在 EC2 中读取加密的 EBS 卷数据?
- spring-integration - 使用 @Valid 将 JSON 集成到对象
- asp.net-core - .Net Core 操作的唯一 ID
- node.js - Gulp 错误 node_contextify - 断言 'args[1]'->IsString() 失败
- r - 使用R将大量文件组织到文件夹中?
- oauth-2.0 - 如何正确授权嵌套的微服务调用
- javascript - Vue 未定义/不是构造函数
- flutter - 我不明白为什么不从小部件树中删除可解雇
- javascript - 如何添加与传递的道具编号一样多的按钮,而不会在 React 上导致过多的重新渲染?