java rx中Observable.defer和Observable.create之间的区别
有人可以解释我在Observable
defer
和create
方法之间的区别吗? 我无法理解何时应该使用defer
,何时应该使用create
..
参考文献:
推迟: http : //reactivex.io/documentation/operators/defer.html
创建: http : //reactivex.io/documentation/operators/create.html
谢谢
所以区别似乎是:当你有一些创建/返回一个observable的东西时, defer
很好,但是你不希望它在订阅之前发生。
当您需要手动包装异步进程并创建一个observable时, create
是很好的。 该创建也推迟到订阅。
换一种方式:
defer
是一个允许可观察序列的延迟组合的运算符。
create
是可观察序列的自定义实现(其中创建延迟到订阅之前)。
因此,如果您有一种情况,您可能just
使用从某些结果/值创建Observable
,或者您有一个返回请求的Observable
的网络API层,但您不希望该请求在订阅之前启动。 defer
对这些情况有好处。
如果您的网络API层没有为请求返回Observable
,但您需要一个Observable
接口,则可以使用create
。 但是,在订阅之前,仍然不会创建Observable
序列。 如果您希望该网络呼叫无论订阅如何开始,那么您将使用不同的机制,如Subject
,可能会重放。
create(…)实际上立即创建了Observable。
public final static Observable create(OnSubscribe f) { return new Observable (hook.onCreate(f)); }
defer(…)接受返回Observable(Subject,etc …)的Factory函数,用OnSubscribeDefer包装它并仅在订阅者订阅时创建Observable,为每个订阅者创建新的Observable。
public final static Observable defer(Func0> observableFactory) { return create(new OnSubscribeDefer (observableFactory)); }
在这里查看更多细节