处理 RxAndroid ForEach 运算符的错误

Handling error on RxAndroid ForEach operator

这是基于 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.[=21 捕获=]

当我在这里时,forEach是否会使用此代码在 io thread 上正确 运行?

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

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