rx-java - 如何限制重试次数
问题描述
我在 retryWhen 中使用 PublishSubject 以允许用户重试操作,类似于此 answer。一切正常,但有一个问题 - 用户点击重试 3 次后,我不应该再允许重试,应该中止操作。有没有办法将重试限制为 3 次?我试过 publishSubject.take(3) 运算符,但没有奏效。
解决方案
运营商,例如retryWhen
具有其结果影响主要流程的次要流程。因此,也可以对这个辅助流执行流操作,因此您可以应用各种运算符来塑造其结果:
适应这个:https ://stackoverflow.com/a/47677308/61158
final PublishSubject<Object> retrySubject = PublishSubject.create();
disposable.add(
getData()
.doOnError(throwable -> enableButton())
.retryWhen(observable ->
observable.zipWith(retrySubject,
(o, o2) -> o
)
.take(3) // <------------------------ maximum 3 items from the secondary sequence
.concatWith(Observable.error(new RetriesExhaustedException()));
)
.subscribeWith(/* do what you want with the result*/)
);
推荐阅读
- javascript - 任何更改 window#mouseOver 都被忽略了吗?
- javascript - 为什么在我的日历组件中使用状态作为字符串不起作用?
- java - 如果 List2 包含 List1 中不存在的一些元素,如何从 List1 中删除 List2 中包含的所有元素?
- react-native - Metro bundler 错误当我运行 expo start
- vba - VBA:如何隐藏在 Microsoft Visio 中右键单击形状或文档区域时显示的浮动工具栏?
- java - 是否有任何 Java 功能方法来避免级联的 NonNull 检查
- c# - C# UnitTest System.Net.Sockets.SocketException
- java - 如何在 wso2 中拒绝请求缺少标头或错误标头
- php - Docker - PHP 不使用分配的资源
- android - Android Staggered Grdiv 查看最后一个元素全屏(如果独立)