这是基于RxJava& RxAndroid 1.x
我是Rx的新手,我想使用forEach
运算符,但我无法处理Action1
内发生的错误。
这是我的代码:
Observable.from(listeningDocumentIds)
.subscribeOn(Schedulers.io())
.doOnError(Throwable::printStackTrace)
.forEach(id -> {
detachDocumentChangeListener(listener, document);
});
detachDocumentChangeListener
函数可能抛出一些异常,但似乎doOnError
没有完成其工作。
可抛出的异常之一是NullPointerException
,显然是RuntimeException
,所以我不明白为什么我的doOnError
没有抓住它。
虽然我在这里,forEach
是否会使用此代码在io
thread
上正确运行?
答案 0 :(得分:2)
doOnError
可以查看来自上方的错误,而不是下面的错误。它不是错误处理程序,因为错误将继续下游到最终使用者。例如,错误处理是通过onErrorResumeNext
完成的。否则,您应该使用两个参数subscribe
而不是forEach
:
Observable.from(listeningDocumentIds)
.subscribeOn(Schedulers.io())
.subscribe(id -> {
detachDocumentChangeListener(listener, document);
}, Throwable::printStackTrace);