gpt4 book ai didi

java - PublishSubject 在 `onError()` 之后停止发射

转载 作者:行者123 更新时间:2023-11-29 08:35:12 37 4
gpt4 key购买 nike

RxJava 查询 :

你好,

我有一个 PublishSubject<Boolean> subject = PublishSubject.create() ;

我正在订阅上述主题并在此之后进行 API 调用:

subject.observeOn(IOThread)
.flatMap(boolean -> getSomethingFromServer())
.observeOn(MainThread)
.subscribe(something ->
showSomethingOnView(),
error -> showRetryView();
)

当错误出现时 UnknownHostException , SocketTimeoutException ,我正在显示重试按钮。单击重试按钮后,我将向 PublishSubject() 发送一个事件.

subject.onNext(boolean Value) ;

但在错误出现后,主题正在终止并且没有其他事件被转发。

在快速搜索中,我可以使用 Notification<> 实现此目的包装器,但还没有找到应用它的好方法。

这是我找到的两个链接:

This link提到使用 Notification .

This link使用 Notification 但包装了 Subject 的初始类型,即 Boolean在通知中。如何包装从 getSomethingFromServer() 获得的错误和响应进入通知。

我是不是做错了什么?

谢谢

最佳答案

Jake Wharton 那里得到了答案:

“在 flatMap 中映射 getSomethingFromServer() 并添加一个 onErrorResume* 运算符

封闭流将永远不会终止

.flatMap(b -> getSomethingFromServer()
.map(response -> WrapperType.success(response))
.onErrorReturn(e -> WrapperType.error(e))
)

无论WrapperType你想要,Notification或你自己的”

同样来自侯赛因阿拉丁:https://twitter.com/Hussein_Ala

"我以前没有用过 Notification,但我要做的是用事件类包装从 getSomethingFromServer() 发出的所有内容。事件可以有不同的状态“成功”、“错误”等等,然后从 onError 覆盖 getSomethingFromServer() 也返回一个事件。最后,您可以处理 onNext 中的不同情况。

事件是您要创建的自定义类,您可以覆盖 onError通过做这样的事情 getSomethingFromServer().onErrorReturn((Function<Throwable, Event>) throwable -> new Event(Event.ERROR, throwable))"

所以这里的技巧是 onErrorReturn() .

关于java - PublishSubject 在 `onError()` 之后停止发射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44658228/

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