当前位置: 首页 > 知识库问答 >
问题:

RxJava可观测concat代码的重构及函数式错误处理

季华茂
2023-03-14
final Observable<A> aResponse =a.update(52, 33, "759", obj);

final Observable<B> bResponse =b.fetch(52, 759);
Map map1 = new HashMap();
Map map2 = new HashMap();

两个rest api调用返回Observables.results连接在下面,map1和map2被填充。


.concat我在这里使用concat来组合两个API的结果。我如何在这里使用.zip()或任何其他函数。flatmap()可以在这里使用吗?

.OnErrorResumeNext用于在响应抛出错误时继续执行bResponse。如果Response失败,如何更好地记录错误。是否应该在OnErrorResumeNext中进行。

使用.subscribe使观察者可以看到由两个可观察对象的级联发出的项。
onError如果bResponse失败,我将使用onError记录错误。如何做得更好?

onNext在onNext中,我将获取对象,如果它是B的实例,则将它键入B,然后填充map1和MAP2中的项。我怎样才能更好地纠正这件事?

Observable.concat(aResponse, bResponse)
            .onErrorResumeNext(new Func1<Throwable, Observable<B>>() {
                @Override
                public Observable<B> call(Throwable throwable) {
                    return bResponse;
                }
            })
            .subscribe(new Subscriber<Object>() {
                @Override
                public void onCompleted() {

                 System.out.println("The response list after the fututres");
               }
                @Override
                public void onError(Throwable e) {

                    System.out.println("ERROR IN BRESPONSE");
                    e.printStackTrace();
                }

                @Override
                public void onNext(Object o) {
                    if(o instanceof B)
                    {
                        ((B)o).getSomething().stream().forEach( s ->  {
                                   map1.put(s.getId(),s.getNumber());
                                   map2.put(s.getId(), s.getList());
                                });
                    }

                }
            });
}

共有2个答案

公西兴业
2023-03-14
热门标签
孔建柏
2023-03-14
相关问题
 类似资料:
  • 下面的代码仅在观察2完成后才从观察1发出项。 我需要实现另一种行为 第二个可观测对象仅发射项目,而第一个可观测对象为空,然后发射第一个可观测对象的项目。 我无法找到只使用基本运算符的正确解决方案,自定义运算符startWithDefault的正确RxJava 2实现应该是什么样子? 附笔。 由于种族原因,在可观察到立即发射的情况下,这不是正确的解决方案1

  • 我正在尝试开发我的第一个RxJava例子 我有一个带有文本框和三个按钮的主要活动。第一个按钮初始化单独类中的整数。第二个按钮订阅一个可观察量,该可观察量假定正在观察整数。第三个按钮将整数的值减小 1。 这是我的密码 和班级 当我尝试使用 订阅时,它只是给了我 的值(即 6),然后它给了我完成! 然后我尝试使用,认为我需要使用,只是而不是,但后来我得到了一个返回的空的,然后再次完成! 有人能帮助我从

  • 我正在使用较新的RX java,而不是 如果一切正常的话,这段代码几乎可以完美地工作。但如果我故意犯了个错误,比如我关掉了WiFi。而不是改型获得“UnknownHostException”...因为它应该发生在try catch块中的reverfit调用(getUser)中。但它没有将错误处理到onError(Throwable t)-->(我可以处理的地方),而是使应用程序崩溃。这就像错误从未

  • 我用java和gradle写了一个简单的Rxjava代码,但是我得到了一些错误,细节如下: 这是我的简单java源代码: 这是我的gradle.build源代码: 我是一个初学者,所以我问,但我做了一个测试在android工作室,相同的java代码,并运行成功。

  • Java8流与RxJava可观测数据类似吗? Java 8流定义:

  • 我正在尝试在MVVM中实现一个ViewModel,提供可观察的东西作为“输入流”,提供观察者作为“输出流”供视图绑定。