处理RxAndroid ForEach运算符

时间:2018-02-22 07:44:17

标签: rx-java rx-android

这是基于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上正确运行?

1 个答案:

答案 0 :(得分:2)

doOnError可以查看来自上方的错误,而不是下面的错误。它不是错误处理程序,因为错误将继续下游到最终使用者。例如,错误处理是通过onErrorResumeNext完成的。否则,您应该使用两个参数subscribe而不是forEach

Observable.from(listeningDocumentIds)
    .subscribeOn(Schedulers.io())
    .subscribe(id -> {
        detachDocumentChangeListener(listener, document);
    }, Throwable::printStackTrace);