我看到了另一个类似的问题,但它没有解决我的问题:
Observable<Integer> resumeSequence = Observable.just(-1);
Observable.just(1,0,2,5)
.flatMap(x ->
Observable.just(10/x)
//.onErrorReturn(error -> -1)
.onErrorResumeNext(resumeSequence)
.onExceptionResumeNext(resumeSequence)
)
// .onErrorReturn(error -> -1)
.onErrorResumeNext(resumeSequence)
.onExceptionResumeNext(resumeSequence)
.subscribe(System.out::println,
throwable -> System.out.println("IN ERROR CALLBACK" + throwable));
理想情况下,Resume应该在flatMap中。输出应打印4个数字&amp; flow不应该转到Error Callback。
答案 0 :(得分:2)
Observable.just
对已计算的值非常有用。
你的代码吼叫
Observable.just(1,0,2,5)
.flatMap(x ->
Observable.just(10/x)
.onErrorResumeNext(resumeSequence)
.onExceptionResumeNext(resumeSequence)
)
可以像这样重写:
Observable.just(1,0,2,5)
.flatMap(x -> {
int result = 10 / x;
return Observable.just(result)
.onErrorResumeNext(resumeSequence)
.onExceptionResumeNext(resumeSequence);
})
所以它解释了你的&#34;主要&#34;感谢Observable
运算符导致onExceptionResumeNext
处于错误状态并完成,因为您的嵌套Observable
永远不会被使用
您想要实现的是不完成observable然后发生错误。为此,您的嵌套Observable
可以在主要Observable
没有完成后立即完成。为此,您必须使用10 / x
运算符推迟fromCallable
的计算:
Observable<Integer> resumeSequence = Observable.just(-1);
Observable.just(1,0,2,5)
// 10 / x will be computed only when this nested observable will subscribe
.flatMap(x -> Observable.fromCompletable(() -> 10/x)
.onErrorResumeNext(resumeSequence)
.onExceptionResumeNext(resumeSequence)
)
.onErrorResumeNext(resumeSequence)
.onExceptionResumeNext(resumeSequence)
.subscribe(System.out::println,
throwable -> System.out.println("IN ERROR CALLBACK" + throwable));