有人能解释和create
方法在Observable
中的区别吗?我不明白的时候,我应该使用defer
当我应该使用create
..java rx中Observable.defer和Observable.create的区别
参考:
推迟:http://reactivex.io/documentation/operators/defer.html
创建:http://reactivex.io/documentation/operators/create.html
谢谢
有人能解释和create
方法在Observable
中的区别吗?我不明白的时候,我应该使用defer
当我应该使用create
..java rx中Observable.defer和Observable.create的区别
参考:
推迟:http://reactivex.io/documentation/operators/defer.html
创建:http://reactivex.io/documentation/operators/create.html
谢谢
创建(。 ..)实际上创建Observable立即。
public final static <T> Observable<T> create(OnSubscribe<T> f) {
return new Observable<T>(hook.onCreate(f));
}
延迟(...)接受工厂函数,返回可观察(主题,等...),与OnSubscribeDefer包装它,并创建可观察到,只有当用户订阅,新观测到每个用户。
public final static <T> Observable<T> defer(Func0<Observable<T>> observableFactory) {
return create(new OnSubscribeDefer<T>(observableFactory));
}
看到更多细节here
所以区别似乎是:defer
是好,当你有一些创建/返回一个可观察的了,但你不希望它这个过程发生直到订阅。
create
当你需要手动包装一个异步进程并创建一个observable时是很好的。该创建是也推迟到订阅。
换一种方式:
defer
是一个操作符,使观察序列的延迟组合物。
create
是可观察序列的自定义实现(创建延迟到订阅的地方)。
所以,如果你有一个情况下,你可能会使用just
创建一些结果/值Observable
或者你有一个返回的请求的Observable
网络API层,但你不希望这一请求揭开序幕直到订阅。 defer
对于这些场景会很好。
如果你有一个网络API层,不返回Observable
的要求,但你需要一个Observable
界面,你可以使用create
。该Observable
序列仍然不会被创建,直到订阅虽然。如果您希望网络电话不管订阅而启动,那么您将使用不同的机制,如Subject
,这可能是重播。