带有RxJava的条件后续请求

时间:2016-02-20 22:43:27

标签: android retrofit rx-java

我的网络客户端设计存在问题。我有一个用例,当客户端尝试从REST API请求项目时,但是如果API返回404 HTTP状态代码,我需要发送请求以在服务器上创建项目,然后再次请求该项目。

我想使用RxJava来避免回调地狱。这是一个有效的用例RxJava吗?是否可以创建这样的条件子请求?

感谢您的时间和答案。

1 个答案:

答案 0 :(得分:2)

根据您的问题,我认为您的内容看起来像是

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);
        }
    });
}

使用Retrofit,您必须简单地确保异常是RetrofitError,强制转换,并获取响应和状态代码。 (((RetrofitError) error).getResponse().getStatus()