【问题标题】:RxJava if/else with multiple chain callsRxJava if/else 有多个链式调用
【发布时间】:2021-04-14 11:42:58
【问题描述】:

我有一个 web 服务调用,它返回一个对象,其中有一个参数指示操作是否成功结束,所以我想在 RxJava 链中过滤它(一种 if/else 语句)使用 RxJava 运算符。有可能吗?

类似这样但不使用 if/else:

    repo.webserviceCall(username, password)
            .flatMap(result -> {

                if (result.isSuccessful())
                    repo.secondWebserviceCall(result.getInfo())
                else
                    showToastMessage("Api call not successful"); //STOP FLOW HERE

            })
            .flatMap(result -> thirdWebserviceCall(res))
            .subscribe(res -> {showSuccessMssg(res)}, throwable -> { showError(t)});

【问题讨论】:

  • webserviceCall的返回类型是什么?

标签: android filter rx-java rx-java2 rx-android


【解决方案1】:

您可以从您的 flatMap 返回一个error(),以便执行在您的订阅调用中转到onError 消费者。

【讨论】:

  • 但我想避免使用 if/else 语句
  • 询问避免使用它们的方法
【解决方案2】:

如果每个服务调用返回一个项目,您可以重新排列运算符,以便不成功不会为第二次和第三次调用运行 flatMap。过滤器会将设置变为空,您可以使用 onComplete 处理程序来显示 toast。

repo.webserviceCall(username, password)
.filter(result -> result.isSuccessful())
.flatMap(result ->
    repo.secondWebserviceCall(result.getInfo())
    .flatMap(result -> thirdWebserviceCall(res))
)
.subscribe(
    res -> showSuccessMssg(res),
    throwable -> showError(t),
    () -> showToastMessage("Api call not successful")
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-16
    • 1970-01-01
    • 2015-09-04
    • 1970-01-01
    • 2020-05-31
    • 2017-08-23
    • 1970-01-01
    相关资源
    最近更新 更多