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