我正在尝试执行以下代码
testRepository
.exists(data)
.flatMap(x -> {
if (x==null) {
return Observable.error(new Exception("Error"));
}
return Observable.just(x);
})
.flatMap(x -> testRepository.create(x))
.flatMap(x -> {
return Observable.just(x);
});
此代码在第一个映射中未引发错误时有效。但是如果抛出错误,它就会挂起。 这有什么不对?
由于
答案 0 :(得分:3)
您还没有正确地声明错误,您不应该通过flatMap执行显式转换为错误observable,因为如果是正状态,则为每个项目创建新的observable并将它们组合起来。
您可以使用
.doOnNext(x -> {
if (x == null) throw new IllegalStateException("null item error");
})
此异常将中断流,并将在onError
订阅回调中正确处理。
最后一条指令也没有意义,因为您将每个元素转换为可观察的单个项目,然后将它们组合回类似的流。
Ps:它也需要在某处调用.subscribe
,但我认为这意味着。