Java 8 RxJava 2.x上出现错误

Java 8 RxJava 2.x上出现错误,java-8,observable,rx-java2,Java 8,Observable,Rx Java2,我正在学习RxJava(绝对是新的,如果这个问题太基础的话,很抱歉),而且我在错误处理机制方面遇到了困难(我已经阅读了文档,但这对我来说是一种高级的理解) 这是我的密码 public static void main(String[] args) { Observable<String> source = Observable.just("Alpha", "Beta", "Gamma", "Upma", "Idly"); Observer<String>

我正在学习RxJava(绝对是新的,如果这个问题太基础的话,很抱歉),而且我在错误处理机制方面遇到了困难(我已经阅读了文档,但这对我来说是一种高级的理解)

这是我的密码

public static void main(String[] args) {
    Observable<String> source = Observable.just("Alpha", "Beta", "Gamma", "Upma", "Idly");
    Observer<String> myObserver = new Observer<String>() {
      @Override
      public void onSubscribe(Disposable d) {
        // do nothing with Disposable, disregard for now
      }
  @Override
  public void onNext(String value) {
    System.out.println("RECEIVED: " + value);
    throw new RuntimeException("I am thrown");
  }

  @Override
  public void onError(Throwable e) {
    System.out.println("I got an error !");
    e.printStackTrace(new PrintStream(System.out));
  }

  @Override
  public void onComplete() {
    System.out.println("Done!");
  }
};
   source.subscribe(myObserver);
  }
关于这一点,我有两个问题

1) 我已经覆盖了
onError
方法的
Observer
。为什么我的
onError()
无法捕获异常

2) 即使
onError
失败(我希望答案1中有一个why),为什么UndeliverableException只抛出两次?理想情况下,它必须抛出4次,因为我有4个其他
可观察的
字符串?

1

onError

通知观察者被观察对象遇到错误情况

不会调用onError
,因为源可观测数据中没有错误。错误被抛出到观测者的
onNext
方法中。如果要测试
onError
,需要在流中抛出错误,例如:

sourece
    .map( str -> throw new RuntimeException("I am thrown: " + str))
    .subscribe(myObserver);
上述代码将调用
onError
,而不是
onNext


二,。 为什么UndeliverableException只抛出两次

我认为,
UndeliverableException
只抛出一次,整个错误消息只描述了一次崩溃。一旦您的代码在带有“alpha”的
onNext
方法中出错退出,之后就不会发生任何事情

尝试只使用一个元素运行代码,如下所示:

Observable<String> source = Observable.just("Alpha");
Observable source=Observable.just(“Alpha”);
并查看是否收到相同的错误消息。此外,您还可以检查是否发射了任何东西:

Observable<String> source = Observable.just("Alpha", "Beta", "Gamma", "Upma", "Idly")
     .doOnNext(/* put log here to see what is being emitted */);
Observable source=可观测的。just(“Alpha”、“Beta”、“Gamma”、“Upma”、“Idly”)
.doOnNext(/*将日志放在此处以查看正在发射的内容*/);
Observable<String> source = Observable.just("Alpha", "Beta", "Gamma", "Upma", "Idly")
     .doOnNext(/* put log here to see what is being emitted */);