【问题标题】:RxJava-> Making API request based on a ConditionRxJava-> 根据条件发出 API 请求
【发布时间】:2016-08-10 09:38:58
【问题描述】:
我的要求是这样的。
- 点击第一个 API 获取响应。在响应中,我有一个定义状态的字段,如果设置了该标志,则进行另一个 API 调用并与第一个结果合并。
- 如果未设置标志,则返回实际响应(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)
});