Java 8 RxJava 2.x上出现错误
我正在学习RxJava(绝对是新的,如果这个问题太基础的话,很抱歉),而且我在错误处理机制方面遇到了困难(我已经阅读了文档,但这对我来说是一种高级的理解) 这是我的密码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>
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 */);