Rxjava 判断多个Observable返回值相同的响应顺序。

最近有个需求,判断三个Observable哪一个最先返回(最要是测试3个地址的网络返回速度),本来很简单的需求使用merge或amb这样的其中一个方法就能判断哪个地址最先返回,但有点郁闷的就是这三个地址返回值是一样的,所以用上面的方法不能实现判断哪个Observable最先返回,下面是后来实现的代码:

ss_GetUsed_SITE= Observable.combineLatest(

GetRetrofit.getRetrofit(B64.dec(SITE1)).create(ImeiService.class).getSITE1().startWith("begin"),

GetRetrofit.getRetrofit(B64.dec(SITE2)).create(ImeiService.class).getSITE2().startWith("begin"),

GetRetrofit.getRetrofit(B64.dec(SITE3)).create(ImeiService.class).getSITE3().startWith("begin"),

newFunc3() {

@Override

publicString call(String s, String s2, String s3) {

if(s.equals("ok"))

{

returnB64.dec(SITE1);

}

else if(s2.equals("ok"))

{

returnB64.dec(SITE2);

}

else if(s3.equals("ok"))

{

returnB64.dec(SITE3);

}

return null;

}

})

.subscribeOn(Schedulers.io())

.subscribe(newObserver() {

@Override

public voidonCompleted() {

}

@Override

public voidonError(Throwable e) {

}

@Override

public voidonNext(String s) {

if(s !=null)

{

if(ss_GetUsed_SITE!=null)

{

ss_GetUsed_SITE.unsubscribe();

}

if(onlineWebSite==null)

{

onlineWebSite= s;

}

seachByIMEI(null);

}

}

});

现在看到了,使用的是combineLatest方法,由于combineLatest方法第一次回调需要三个Observable全有返回值才能产生,所以每个Observable都加入了一个startwith方法用来产生回调,之后通过Fun中的参数值就能判断哪个Observable最先返回。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 注:只包含标准包中的操作符,用于个人学习及备忘参考博客:http://blog.csdn.net/maplejaw...
    小白要超神阅读 6,732评论 2 8
  • 作者: maplejaw本篇只解析标准包中的操作符。对于扩展包,由于使用率较低,如有需求,请读者自行查阅文档。 创...
    maplejaw_阅读 46,078评论 8 93
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,174评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,572评论 18 399
  • 响应式编程简介 响应式编程是一种基于异步数据流概念的编程模式。数据流就像一条河:它可以被观测,被过滤,被操作,或者...
    说码解字阅读 8,557评论 0 5

友情链接更多精彩内容