首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RxJava1 vs Rxjava2: onNext中的异常

RxJava1 vs Rxjava2: onNext中的异常
EN

Stack Overflow用户
提问于 2017-01-25 19:00:36
回答 1查看 445关注 0票数 5

在RxJava1中执行以下操作时,onNext中的异常会重新路由到同一订阅者的onError中:

代码语言:javascript
复制
    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());
        }
    });

输出:

代码语言:javascript
复制
D/RxJava1: 1 - 1
D/RxJava1: 22 - 2
D/RxJava1: 333 - 3
D/RxJava1: onError: null

据我所知,当在RxJava2中做同样的事情时,这种行为已经改变,不再返回到onError,而只是崩溃:

代码语言:javascript
复制
    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() {

        }
    });

输出:

代码语言:javascript
复制
D/RxJava2: 1 - 1
D/RxJava2: 22 - 2
D/RxJava2: 333 - 3
D/AndroidRuntime: Shutting down VM

我最想知道的是,这两个版本中哪一个是“错误的”?这是RxJava1中的一个已经修复的错误吗?这是RxJava2中的错误吗?或者,这不是一次有意识的改变,因为我找不到关于这方面的任何细节?

ps。我确实注意到,将它包装到'SafeObserver‘中会重新路由到onError

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-25 19:11:23

没有错,两个版本有不同的设计约束。在2.x中,Observer/Subscriber不能从它的onXXX方法抛出。

如果您在2.x中使用1-2-3个参数的subscribe()方法,您将会被介绍。否则,如果你真的不能修复你的onNext,使用safeSubscribe()

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41849848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档