Java rx 中的 Observable.defer 和 Observable.create 之间的区别

2022-09-01 05:16:43

有人可以解释一下 和 方法之间的区别吗?我不明白什么时候应该使用,什么时候应该使用..defercreateObservabledefercreate

引用:

延期:http://reactivex.io/documentation/operators/defer.html

创建: http://reactivex.io/documentation/operators/create.html

谢谢


答案 1

因此,区别似乎是:当您已经创建/返回可观察量的内容时,这是好的,但是您不希望该过程在订阅之前发生。defer

create当您需要手动包装异步进程并创建可观察量时,这很好。该创建也会推迟到订阅。

换句话说:

defer是一个运算符,它允许可观察序列的延迟组合。

create是可观察序列的自定义实现(其中创建将推迟到订阅)。

因此,如果您遇到可能用于从某些结果/值创建的情况,或者您有一个返回请求的网络 API 层,但您不希望该请求在订阅之前启动。 对于这些情况会很好。justObservableObservabledefer

如果您的网络 API 层返回 for 请求,但您需要一个接口,则可以使用 .但是,在订阅之前,该序列仍不会创建。如果您希望该网络调用在不考虑订阅的情况下启动,则可以使用其他机制,例如 可能重播的 。ObservableObservablecreateObservableSubject


答案 2

create(...) 实际上立即创建 Observable。

    public final static <T> Observable<T> create(OnSubscribe<T> f) {
        return new Observable<T>(hook.onCreate(f));
    }

defer(...) 接受返回 Observable(Subject 等)的 Factory 函数,用 OnSubscribeDefer 包装它,并仅在订阅者订阅时才创建 Observable,为每个订阅者创建新的 Observable。

public final static <T> Observable<T> defer(Func0<Observable<T>> observableFactory) {
    return create(new OnSubscribeDefer<T>(observableFactory));
}

在此处查看更多详细信息


推荐