RxJava2在onErrorResumeNext中返回不同的Observable

时间:2018-11-29 15:38:42

标签: android rx-java2

我有多个Singles在我的viewModel中返回三种类型。 假设他们返回TypeA,TypeB和TypeC。

我正在尝试实施以下方案:

启动TypeA->如果成功,则启动TypeB(以TypeA的结果作为参数),如果出错-下降到订阅的onError。

如果TypeB正确无误-只需订阅成功即可

如果TypeB失败,则启动TypeC(以TypeA的结果作为参数)

如果完成TypeC操作没有错误-只需订阅成功即可

如果TypeC失败,则记录“ Type C失败”,并下降到订阅的onError。

我尝试使用下面的代码实现这一逻辑(为简单起见,删除了线程切换方法):

// progress dialog impl removed for simplicity 
viewModel.getTypeA().doOnSubscribe(v -> {
progressDialog.setMessage("Going for TypeA");
progressDialog.show();
})
.flatMap(typeA -> viewModel.getTypeB(typeA).doOnSubscribe(v ->
progressDialog.setMessage("Going for TypeB"))
.doOnSuccess(typeB -> progressDialog.setMessage("Operation is done: " + typeB.getOperation()))
.onErrorResumeNext(error -> viewModel.getTypeC(typeA))
.doOnSubscribe(v -> progressDialog.setMessage("TypeB failed, going for TypeC")))
.doFinally(() -> progressDialog.dismiss())
.subscribe(xType -> 
{
/* if it's a result of typeB - log "type B success",
   if it's a result of typeC - log "type C success" */ 
}
, error -> {/* log critical error we cannot handle */});

我希望在onSuccess订阅中使用typeB和typeC作为可能的参数,以便将它们都放在一个地方。

RxJava2中可以吗?

我不想从“父”类继承它们,因为实际上,typeB是服务器的响应,而typeC是将数据保存到数据库中的结果。

关于如何使用Rx实现这种逻辑的任何建议也都很好。

0 个答案:

没有答案