我在RxJava2中使用Maybe
类。
我注册了doOnDispose
回调以检测Dispose事件,但未触发。
Maybe.just("aaa")
.doOnDispose({ /* do something */ })
.subscribe( ... )
我查看了RxJava 2代码,但是
Maybe
似乎不支持doOnDispose
。Maybe
是在MaybePeek
中创建的DoOnDisposeObserver
(不是doOnDispose
)对象,@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
中的操作。请注意,如果完成流所花费的时间少于进行下一个操作(
disposable.dispose()
)的时间,则不应调用onDispose
操作。因此,为了验证它,您可以使用延迟:Disposable disposable = Maybe.just("aaa")
.delay(2000, TimeUnit.MILLISECONDS)
.doOnDispose({ /* do something */ })
.subscribe( ... )
disposable.dispose();
现在该动作应该被解雇。
关于java - 为什么RxJava2不支持“Maybe.doOnDispose”?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47196879/