2
我的网络客户端设计有问题。我有一个用例,当客户端试图从REST API请求一个项目时,但是如果API返回一个404 HTTP状态码,我需要发送一个请求在服务器上创建项目,然后再次请求该项目。RxJava有条件的后续请求
我想用RxJava来避免回调地狱。这是一个有效的用例RxJava吗?是否有可能创建这样一个有条件的子请求?
谢谢你的时间和答案。
我的网络客户端设计有问题。我有一个用例,当客户端试图从REST API请求一个项目时,但是如果API返回一个404 HTTP状态码,我需要发送一个请求在服务器上创建项目,然后再次请求该项目。RxJava有条件的后续请求
我想用RxJava来避免回调地狱。这是一个有效的用例RxJava吗?是否有可能创建这样一个有条件的子请求?
谢谢你的时间和答案。
根据你的问题,我认为你有一些看起来像
public Observable<Item> getItem();
将要么返回的项目,或触发一个错误,并且
public Observable<?> createItem();
这将创建一个。
您可以使用这两个在一起,就像这样:
public Observable<Item> getOrCreateItem() {
return getItem().onErrorResumeNext(error -> {
// Depending on your framework, figure out which is the result code
if (error.getResultCode() == 404) {
return createItem().flatMap(ignored -> getItem());
} else {
return Observable.error(error);
}
});
}
随着改造,你必须只需确保例外是RetrofitError
,投它,并得到响应和状态代码。 (((RetrofitError) error).getResponse().getStatus()
)
绝对,根据你的休息客户端(改装,我想?),404将落入一个onError。你可以在'onErrorReturn'或'doOnError'中捕获它来返回一个不同的东西。 – njzk2