При выполнении следующих действий в RxJava1, исключение в onNext будет перенаправлен в OnError одного и того же абонента:RxJava1 против Rxjava2: Исключение в onNext
Observable.from(Arrays.asList("1", "22", "333", "4444")).subscribe(new Subscriber<String>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
Log.d("RxJava1", "onError: " + e.getCause());
}
@Override
public void onNext(String s) {
if (s.length() == 4) {
Integer test = null;
test.hashCode();
}
Log.d("RxJava1", s + " - " + s.length());
}
});
выход:
D/RxJava1: 1 - 1
D/RxJava1: 22 - 2
D/RxJava1: 333 - 3
D/RxJava1: onError: null
При выполнении , насколько мне известно, то же самое в RxJava2, это поведение изменилось и больше не возвращается к onError, но просто сбой:
Observable.fromIterable(Arrays.asList("1", "22", "333", "4444")).subscribeWith(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String s) {
if (s.length() == 4) {
Integer test = null;
test.hashCode();
}
Log.d("RxJava2", s + " - " + s.length());
}
@Override
public void onError(Throwable e) {
Log.d("RxJava2", "onError: " + e.getCause());
}
@Override
public void onComplete() {
}
});
Выход:
D/RxJava2: 1 - 1
D/RxJava2: 22 - 2
D/RxJava2: 333 - 3
D/AndroidRuntime: Shutting down VM
Я в основном хотел бы знать, какой из 2-й вариант делают это «неправильно»? Была ли эта ошибка исправлена в RxJava1? Это ошибка в RxJava2? Или это не было сознательным изменением в первую очередь, так как я не могу найти никаких подробностей об этом?
пс. Я заметил, что обертывание этого в «SafeObserver» повторно перенаправляется на onError снова