gpt4 book ai didi

java - 如何在订阅/取消订阅时执行 Completable

转载 作者:行者123 更新时间:2023-11-30 08:32:35 25 4
gpt4 key购买 nike

有我的方法:

public void openWorkshift(WorkshiftSettings workshiftSettings, Subscriber<WorkshiftSettings> subscriber) {
api.openWorkshift(workshiftSettings)
.compose(RxOperatorsHelpers.additionalStacktrace())
.doOnSubscribe(() -> actionsSystem.registerAction(...).await()) // <-
.doOnUnsubscribe(() -> actionsSystem.unregisterAction(...).await()); // <-
.subscribeOn(ioScheduler)
.observeOn(uiScheduler)
.doOnError(this::handleError)
.subscribe(subscriber);
}

ActionsSystem.registerAction(...)/ActionsSystem.unregisterActions(...) 看起来像这样:

public Completable registerAction(OperatorAction action) {
return Completable.fromAction(() -> actions.add(action));
}

public Completable unregisterAction(OperatorAction action) {
return Completable.fromAction(() -> actions.remove(action));
}

如您所见,我使用 .await() 在源 Observable 的流中执行 Completable。感觉像是错误的解决方案。 我怎样才能做得更优雅?

最佳答案

由于您的 Completable 执行琐碎的操作,您可以简单地将它们的代码内联到 doOnSubscribedoOnUnsubscribe 中:

        .doOnSubscribe(() -> actions.add(action))
.doOnUnsubscribe(() -> actions.remove(action))

您可以通过从可完成的 andThen 开始 Observable 序列的其余部分来避免 doOnSubscribe:

actionsSyste.registerAction(...)
.andThen(api.openWorkshift(workshiftSettings)
.compose(RxOperatorsHelpers.additionalStacktrace())
.doOnUnsubscribe(() -> actionsSyste.unregisterAction(...).await())
.subscribeOn(ioScheduler)
.observeOn(uiScheduler)
.doOnError(this::handleError)
)
.subscribe(...)

目前,没有办法在下游取消订阅时执行Completable,也没有简单的方法在序列可能正常终止或出现异常时执行它。

关于java - 如何在订阅/取消订阅时执行 Completable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40085264/

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