以下是我的示例代码,结果如下:
Observable.range(0, 10)
.flatMap(actNumber -> {
if (actNumber == 3) {
return Observable.error(new Throwable("This is an error"));
}
return Observable.just(actNumber);
})
.onErrorReturnItem(-1)
.subscribe(new Consumer<Integer>() {
@Override
public void accept(Integer number) throws Exception {
Logs.d("number -> " + number);
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
Log.d("RX", "Error: " + throwable.toString());
}
});
0,1,2,-1
没关系,但我怎样才能为此结果设置它?
0,1,2,-1,4,5,6,7,8,9
谢谢你, 罗伯特
答案 0 :(得分:1)
根据Observable contract,一旦Observable发出onError
或onCompleted
,Observable信号就不会再发出任何元素。您遇到的问题是,如果号码为Observable.error()
,您将返回3
,onError
将Consumer
发送给Observable
.error(new Throwable("error"))
.catchErrorResumeNext(Observable.range(3, 10))
,然后终止信号。
根据合同,无法在错误后继续发出信号。但是,您可以做的是捕获并从错误中恢复并开始返回新的Observable信号。运营商的文档可以be found here。
这是一个例子
{{1}}
(注意:我没有测试此代码,但它应该指向正确的