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