美文网首页
Rxjava 判断多个Observable返回值相同的响应顺序。

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

作者: markzhen | 来源:发表于2016-10-10 15:27 被阅读0次

    最近有个需求,判断三个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最先返回。

    相关文章

      网友评论

          本文标题:Rxjava 判断多个Observable返回值相同的响应顺序。

          本文链接:https://www.haomeiwen.com/subject/ajfvyttx.html