簡體   English   中英

為什么RxJava2不支持“ Maybe.doOnDispose”?

[英]Why “Maybe.doOnDispose” is not supported in RxJava2?

我在RxJava2中使用Maybe類。

我注冊了doOnDispose回調以檢測Dispose事件,但未觸發。

Maybe.just("aaa")
    .doOnDispose({ /* do something */ })
    .subscribe( ... )

我查看了RxJava 2代碼,但Maybe似乎不支持doOnDispose

Maybe是在doOnDispose創建MaybePeek (不是DoOnDisposeObserver )對象,

@CheckReturnValue
@SchedulerSupport("none")
public final Maybe<T> doOnDispose(Action onDispose) {
    return RxJavaPlugins.onAssembly(new MaybePeek(this, Functions.emptyConsumer(), Functions.emptyConsumer(), Functions.emptyConsumer(), Functions.EMPTY_ACTION, Functions.EMPTY_ACTION, (Action)ObjectHelper.requireNonNull(onDispose, "onDispose is null")));
}

protected void subscribeActual(MaybeObserver<? super T> observer) {
    this.source.subscribe(new MaybePeek.MaybePeekObserver(observer, this));
}

但是, Single是create DoOnDisposeObserver ,並且運行良好。

@CheckReturnValue
@SchedulerSupport("none")
public final Single<T> doOnDispose(Action onDispose) {
    ObjectHelper.requireNonNull(onDispose, "onDispose is null");
    return RxJavaPlugins.onAssembly(new SingleDoOnDispose(this, onDispose));
}

protected void subscribeActual(SingleObserver<? super T> s) {
    this.source.subscribe(new SingleDoOnDispose.DoOnDisposeObserver(s, this.onDispose));
}

為什么不支持Maybe.doOnDispose

如文檔所述,關於doOnDispose(Action onDispose)

如果下游處理序列,則調用處理操作。

由於您的下游永遠不會處理它,因此它永遠不會調用。

Disposable disposable = Maybe.just("aaa")
    .doOnDispose({ /* do something */ })
    .subscribe( ... )

disposable.dispose();

現在應該調用doOnDispose的操作。

請注意,如果流的完成所花的時間少於進行下一個操作( onDispose disposable.dispose() )的時間,則不應調用onDispose操作。 因此,為了驗證它,您可以使用延遲:

Disposable disposable = Maybe.just("aaa")
    .delay(2000, TimeUnit.MILLISECONDS)
    .doOnDispose({ /* do something */ })
    .subscribe( ... )

disposable.dispose();

現在該動作應該被解雇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM