答案 0 :(得分:2)
不幸的是,该文章中的声明不正确,Observable
与Future
之类的内容之间不存在真正的双重投放。问题是Observable
是更强大的抽象,可以表示Future
无法表示的事物。例如,Observable
实际上可能代表无限序列。例如,请参阅Observable.interval
。显然,没有办法用Future
表示这样的东西。该文中使用的Observable.toList
调用明确提到:
返回发出单个项目的
Single
,该列表由 有限 源ObservableSource
发出的所有项组成。
后来它说:
无限且永不完整的源将永远不会通过此运算符发出任何内容,并且无限的源可能会导致致命的OutOfMemoryError。
即使您将自己仅限于有限Observable
s,仍然Future
无法完全表达Observable
的语义。考虑在某段时间内逐个生成有限范围的Observable.intervalRange
。使用Observable
,第一个事件发生在initialDelay
之后,然后每个period
获得一个事件。使用Future
,您只能获得一个事件,并且必须仅在序列完全生成时才完成Observable
。这意味着通过将Observable[A]
转换为Future[List[A]]
,您可以立即打破Observable
的主要好处 - 反应性:您无法逐个处理事件,您必须在一个处理它们束。
总结本文第一段的主张:
在两者之间进行转换,而不会失去它们的异步和事件驱动性质。
为false,因为转化为Observable[A]
- > Future[List[A]]
完全失去了Observable
的“事件驱动的本质”,并且没有办法解决这个问题。
P.S。实际上Future
不如Observable
强大的事实不应该是一个大惊喜。如果不是,为什么有人会在第一时间创建Observable
?