我有以下情况,在这种情况下,一旦我从zip(getHardwareInfo)获得服务响应,就需要进行另一个服务调用(getSoftwareInfo())。因此,基本上,只有在getHardwareInfo()成功时才调用getSoftwareInfo()。

-现在我想添加一个条件,不仅要在成功获取getHardwareInfo之后调用getSoftwareInfo(),而且要满足条件(即isChristmas())。我已经将代码从版本1更改为版本2,并且可以正常工作。我已经调试了它,看起来工作正常。由于我是rxjava的新手,因此不确定我是否正确执行了操作。任何帮助将不胜感激。

版本1:

public Single<ComputerData> getComputerData(){
 return getHardwareInfo().observeOn(AndroidSchedulers.mainThread())
           .onErrorREsumeNext(throwable->{
            return Single.error()
        }).flatMap(hardwareInfo->{
           //do something with hardwareInfo
           return getSoftwareInfo();
        .observeOn(AndroidSchedulers.mainThread())
        .onErrorResumeNext(throwable->{
         return Single.error());
         })
         .flatMap(softwareInfo->{
           //do something with softwareInfo
         });


版本2:

public Single<ComputerData> getComputerData(){
 return getHardwareInfo().observeOn(AndroidSchedulers.mainThread())
           .onErrorREsumeNext(throwable->{
            return Single.error()
        }).flatMap(hardwareInfo->{
           //do something with hardwareInfo
          if(isChristmas()){
           return getSoftwareInfo()
                 .observeOn(AndroidSchedulers.mainThread());
                 .onErrorResumeNext(throwable->{
                  return Single.error());
                  })
                  .flatMap(sofwareInfo->{
                  //do something with softwareInfo
                  });
          } else{
                //do something else.
           }
         });

最佳答案

如果只想返回错误,则不需要onErrorResumeNext

就是这个:

getHardwareInfo()
    .flatMap(hi -> getSoftwareInfo())
    .filter(si -> isChristmas());


您只需要添加适当的调度程序

07-28 01:47