【问题标题】:RxJava-> Making API request based on a ConditionRxJava-> 根据条件发出 API 请求
【发布时间】:2016-08-10 09:38:58
【问题描述】:

我的要求是这样的。

  1. 点击第一个 API 获取响应。在响应中,我有一个定义状态的字段,如果设置了该标志,则进行另一个 API 调用并与第一个结果合并。
  2. 如果未设置标志,则返回实际响应(First Response)。

如果我使用过滤器,它会忽略错误的项目,如果没有设置标志,我不想忽略当前的响应。

我们如何使用 RxJava、FlatMap 和 Filter 来实现这一点?

【问题讨论】:

  • 为什么标记为无效?给个提示??

标签: android rx-java reactive-programming rx-android


【解决方案1】:

您不需要filter。只需检查flatMap 中的状态即可。如果已设置,则触发请求并调用startWith 将其与原始请求连接(您可以将startWith 替换为任何代码以根据需要组合结果);如果没有,请使用 just 包装响应。这是一个例子:

class MyResponse {

    boolean status;

    public MyResponse(boolean status) {
        this.status = status;
    }

    public static Observable<MyResponse> request() {
        return Observable.just(new MyResponse(false));
    }
}

Observable<MyResponse> response = Observable.just(new MyResponse(false));

response.first().flatMap(r -> {
        if (r.status) {
            return MyResponse.request().startWith(r);
        } else {
            return Observable.just(r);
        }
});

【讨论】:

    【解决方案2】:

    只需使用过滤器

      RxHelper.toObservable(request1)
             .filter(response1 -> response1.status == "200")
             .flatMap(response1-> RxHelper.toObservable(request2))
             .map(response2 -> //Bla)
      });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-14
      • 2015-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多