首页 / JAVA / RxJava主题和错误处理
RxJava主题和错误处理
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了RxJava主题和错误处理,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1875字,纯文字阅读大概需要3分钟。
内容图文
我正在尝试实现类似于事件总线的行为.对于我的要求,似乎可以使用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主题和错误处理所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。