Rxjava2: использование плоской карты - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть сценарий ниже, где, как только я получаю ответ службы от 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.
           }
         });

1 Ответ

0 голосов
/ 17 декабря 2018

onErrorResumeNext не требуется, если вы просто хотите вернуть ошибку.

Вот и все:

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

Вам просто нужно добавить правильные планировщики

...