У меня есть сценарий ниже, в котором, как только я получаю ответ службы от zip (getHardwareInfo), мне нужно сделать еще один вызов службы (getSoftwareInfo ()). Таким образом, в основном getSoftwareInfo () вызывается только в случае успешного выполнения getHardwareInfo ().
-Теперь я хочу добавить условие, при котором getSoftwareInfo () вызывается не только после успешного выполнения getHardwareInfo, но и при выполнении условия, то есть 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());
Вам просто нужно добавить подходящие планировщики
Также я хотел бы сделать что-нибудь еще (вернуть значение), если! IsChristmas (). Я забыл добавить это в свой код. Я отредактировал свой ответ. Насколько я понимаю, это невозможно сделать с помощью фильтра.