首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在可完成的retryWhen之后,rxjava完成

在可完成的retryWhen之后,rxjava完成
EN

Stack Overflow用户
提问于 2019-02-25 08:52:31
回答 1查看 139关注 0票数 0

我在Completeable上使用retryWhen操作符,有什么方法可以告诉它从可重试流中完成吗?就像这样-

代码语言:javascript
复制
PublishSubject<?> retrySubject = PublishSubject.create();
public void someFunction() {
    someCompletable.retryWhen(new Function<Flowable<Throwable>, Publisher<?>>() {
        @Override
        public Publisher<?> apply(Flowable<Throwable> throwableFlowable) throws Exception {
            return throwableFlowable.flatMap(throwable -> retrySubject.toFlowable(BackpressureStrategy.MISSING));
        }
    }).subscribe();
}

public void ignoreError(){
    retrySubject.onComplete();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-25 10:19:41

您不能通过为flatMap提供一个空源来阻止它。而且,每一个错误都会使越来越多的观察者订阅到导致内存泄漏的主题上。

使用takeUntil通过另一个源的帮助停止序列:

代码语言:javascript
复制
PublishProcessor<Throwable> stopProcessor = PublishProcessor.create();

source.retryWhen(errors -> 
    errors.takeUntil(
        stopProcessor
    )
    .flatMap(error -> Flowable.timer(1, TimeUnit.SECONDS))
)

stopProcessor.onComplete();

编辑如果要重用相同的主题,可以在停止路径上取消项目:

代码语言:javascript
复制
PublishProcessor<Integer> stopProcessor = PublishProcessor.create();

source.retryWhen(errors -> 
    errors.takeUntil(
        stopProcessor.ignoreElements().toFlowable()
    )
    .flatMap(error -> stopProcessor)
)

// retry
stopProcessor.onNext(1);

// stop
stopProcessor.onComplete();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54862489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档