RxJava主题和错误处理

RxJava主题和错误处理,第1张

概述我正在尝试实现类似于事件总线的行为.对于我的要求,似乎可以使用PublishSubject.主题发出表示某些全局 *** 作结果的项目,这些 *** 作可能成功解决,或者在出现异常的情况下失败.在发生错误的情况下,我无法将onNext()用于成功事件,将onError()与Throwable一起使用,因为一旦调用onError(),

我正在尝试实现类似于事件总线的行为.对于我的要求,似乎可以使用PublishSubject.

主题发出表示某些全局 *** 作结果的项目,这些 *** 作可能成功解决,或者在出现异常的情况下失败.在发生错误的情况下,我无法将onNext()用于成功事件,将onError()与Throwable一起使用,因为一旦调用onError(),该主题就会终止,并且除onError()之外,任何将来的订阅者都不会得到发射.

现在,按照我的观察方式,我必须创建一个表示事件的类,并在发生错误时有选择地引用Throwable.但是,这似乎是不明智的,因为必须处理onNext()内部的错误.

你会怎么做?

解决方法:

创建包装事件的通用类是一种方法.假设我们将其称为ResponSEOrError类,它基本上应该包含两个字段

private T data;private Throwable error;

和两个简单​​的工厂方法:

public static <T> ResponSEOrError<T> fromError(Throwable throwable) {    return new ResponSEOrError<>(throwable);}public static <T> ResponSEOrError<T> fromData(T data) {    return new ResponSEOrError<>(data);}

要删除一些样板代码,您可以提供transformer以使Observable成为ResponSEOrError类型.

public static <T> Observable.transformer<T, ResponSEOrError<T>> toResponSEOrErrorObservable() {    return new Observable.transformer<T, ResponSEOrError<T>>() {        @OverrIDe        public Observable<ResponSEOrError<T>> call(final Observable<T> observable) {            return observable                    .map(new Func1<T, ResponSEOrError<T>>() {                        @OverrIDe                        public ResponSEOrError<T> call(final T t) {                            return ResponSEOrError.fromData(t);                        }                    })                    .onErrorResumeNext(new Func1<Throwable, Observable<? extends ResponSEOrError<T>>>() {                        @OverrIDe                        public Observable<? extends ResponSEOrError<T>> call(final Throwable throwable) {                            return Observable.just(ResponSEOrError.<T>fromError(throwable));                        }                    });        }    };}

那么您可以像这样使用它:

final Observable<ResponSEOrError<importantData>> compose = mNetworkService               .getimportantData()               .compose(ResponSEOrError.<importantData>toResponSEOrErrorObservable());

现在您可以轻松地根据成功或失败来映射结果,甚至可以提供另一个transformer返回映射的Observable< &而不是Observable< ResponSEOrError< T>

总结

以上是内存溢出为你收集整理的RxJava主题和错误处理全部内容,希望文章能够帮你解决RxJava主题和错误处理所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1089829.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-27
下一篇2022-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存