我正在创建一个可观察的序列,如果条件不满足,我基本上正在寻找一种打破链的好方法。理想情况下,我们可以通过此方案中的错误。这基本上是删除flatmap运算符中的if / else语句。这就像我现在的那样
flatMap(new Func1<User, Observable<Response>>() {
@Override
public Observable<Response> call(Result result) {
if(isValid(result))) {
return api.getObservableResponse(); //some retrofit observable
} else {
observer.onError();
return null; //??? I guess this would force an error
}
}
})
我见过过滤器()等运算符和所有其他条件运算符,但我不确定它们是否符合我的要求。有一个更好的方法吗?或者我看起来很好吗?谢谢!
答案 0 :(得分:3)
如何使用takeWhile
- docs?
Observable<T> whatever = ...
Observable<T> untilConditionMet = whatever
.takeWhile(this::isValid) // modify according wherever isValid comes from
.flatMap(r -> api.getObservableResponse()); // only doing this until isValid