RxJava2 - 从订阅的使用者那里抛出异常

时间:2018-02-13 13:53:43

标签: java rx-java2 rx-android

  public void testOne() throws IOException {
    throw new IOException();
  }

  public void testTwo() {
    Completable.error(new Exception("Test exception"))
        .subscribe(() -> {}, throwable -> {});
  }

  public void testThree() throws IOException {
    Completable.error(new Exception("Test exception"))
        .subscribe(
            () -> {},
            throwable -> {
              throw new IOException(throwable);
            }
        );
  }

第一种和第二种方法完美无缺。但是,如果我想要从Completable中捕获异常并重新抛出它,我不能:

io.reactivex.exceptions.UndeliverableException: java.io.IOException: java.lang.Exception: Test exception

我不完全理解为什么我不能从subscribe()方法中抛出异常?我该如何正确处理这种情况?

1 个答案:

答案 0 :(得分:0)

根据akarnokd的建议,我可以使用阻塞方法之一。就我而言,我决定这样做:

  public void testThree() throws IOException {
    final Throwable throwable = Completable.error(new Exception("Test exception")).blockingGet();
    if (throwable != null) {
      throw new IOException(throwable);
    }
  }