代码之家  ›  专栏  ›  技术社区  ›  tir38

RxJava:我能在传递给onError之前截获所有错误吗?

  •  1
  • tir38  · 技术社区  · 6 年前

    void main() {
        Observable.just(1)
                .doOnNext(integer -> dangerousOperation())
                .subscribe(
                        integer -> {
                            // TODO
                        },
                        error -> {
                            if (error instanceof ExceptionA) {
                                // recover gracefully
                            }
                        });
    }
    
    void dangerousOperation() {
        throw new ExceptionA();
    }
    

    假设我在我的应用程序中的许多地方执行了这个危险的操作。在每个流中,我都添加了一些特定于每个流的恢复代码。

    我现在需要为我的危险操作添加一个新错误:

    void dangerousOperation() {
        Random random = new Random();
        if (random.nextBoolean()) {
            throw new ExceptionA();
        } else {
            throw new ExceptionB();
        }
    }
    

    ExceptionB 同样的方法 . 换句话说,我想处理 ExceptionA 例外B 以全球性的方式。

    有什么方法可以“截获”一个错误吗 每一个 RxJava流 是否将其传递给错误处理程序?++

    例外B 在每一个OneError中,我都会复制很多代码。如果我完全从每个流中删除onError块,并且只依赖全局 RxJavaPlugins.setErrorHandler() 我无法处理 例外a 以特定于流的方式。


    1 回复  |  直到 6 年前
        1
  •  0
  •   Samuel Robert    6 年前

     boolean handleException(Exception error) {
         if (error instanceof ExceptionB) {
             // handle the global exception here
             return true;
         }
         return false;
     }
    

    现在,从每个流错误实现中,您可以调用上面的函数来处理全局错误情况

     error -> {
           if (!handleException(error) {
                  // handle the other specific cases here
           }
     });