2016-02-20 42 views
2

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

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

谢谢你的时间和答案。

+1

绝对,根据你的休息客户端(改装,我想?),404将落入一个onError。你可以在'onErrorReturn'或'doOnError'中捕获它来返回一个不同的东西。 – njzk2

回答

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

随着改造,你必须只需确保例外是RetrofitError,投它,并得到响应和状态代码。 (((RetrofitError) error).getResponse().getStatus()