我有一个webservice调用,它返回一个对象,其中有一个参数指示操作是否成功结束,所以我想使用RxJava运算符在RxJava
链内过滤它(有点像if/else语句(。有可能吗?
类似的东西,但不使用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)});
您可以从flatMap返回一个error()
,以便执行转到订阅调用中的onError
使用者。
如果每个服务调用都返回一个项,则可以重新排列运算符,这样不成功就不会为第二个和第三个调用运行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")
);