我是相對較新的RXJava一般(真的只開始使用它與RXJava2),我能找到的大多數文件往往是RXJava1;我通常可以在兩者之間進行翻譯,但是整個反應性的東西非常大,它是一個壓倒性的API,有很好的文檔(當你找到它的時候)。我試圖簡化我的代碼,我想用嬰兒步驟來完成它。我想要解決的第一個問題是我在當前項目中做的很多常見模式:RXJava2:正確的模式鏈改造請求
您有一個請求,如果成功,您將使用該請求發出第二個請求。
如果要麼失敗,您需要能夠確定哪一個失敗。 (主要是爲了顯示自定義UI警報)。
這是怎麼了,我通常做的現在:
(省略.subscribeOn/observeOn
爲簡單起見)
Single<FirstResponse> first = retrofitService.getSomething();
first
.subscribeWith(
new DisposableSingleObserver<FirstResponse>() {
@Override
public void onSuccess(final FirstResponse firstResponse) {
// If FirstResponse is OK…
Single<SecondResponse> second =
retrofitService
.getSecondResponse(firstResponse.id) //value from 1st
.subscribeWith(
new DisposableSingleObserver<SecondResponse>() {
@Override
public void onSuccess(final SecondResponse secondResponse) {
// we're done with both!
}
@Override
public void onError(final Throwable error) {
//2nd request Failed,
}
});
}
@Override
public void onError(final Throwable error) {
//firstRequest Failed,
}
});
有沒有更好的方式來處理這RXJava2?
我試過flatMap
和變化,甚至Single.zip
或類似,但我不知道什麼是最簡單和最常見的模式來處理這個問題。
如果您想知道FirstRequest將獲取實際的Token
我需要在SecondRequest中。如果沒有令牌,則無法發出第二次請求。
感謝您的迴應,這是我的想法(不幸的是我沒有Retrolambda在這個項目上)你會介意幫助我解開lambda簡化嗎? –
@MartinMarconcini我添加了一個沒有lambda的例子。 – cyroxis
感謝您的示例,我得到了它的工作。只是爲了記錄這是RXJava2,所以'Func1'是'Function'。 –