[英]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.