gpt4 book ai didi

java - 为什么RxJava2不支持 "Maybe.doOnDispose"?

转载 作者:行者123 更新时间:2023-12-02 02:30:33 32 4
gpt4 key购买 nike

我正在使用Maybe RxJava2 中的类。

我注册了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 已创建 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)

Calls the dispose Action if the downstream disposes the sequence.

由于您的下游从未处置它,因此它永远不会调用。

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/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com