2016-02-20 43 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()