我有以下情况,在这种情况下,一旦我从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());
您只需要添加适当的调度程序