1
AIM:當某事發生變化時刷新適配器,但僅在用戶停止滾動列表時刷新。RxJava在doOnNext內部拋出失敗時重試
我想在doOnNext
中拋出一個錯誤,以便我可以再等待並重試。但是,這不起作用。我可以看到異常正在拋出,但retryWhen
似乎沒有做任何事情。
我在這裏做錯了什麼?
someObservable()
.observeOn(AndroidSchedulers.mainThread())
.debounce(650, TimeUnit.MILLISECONDS)
.doOnNext(o -> {
if (isListScrolling()) {
throw new IllegalStateException();
}
})
.retryWhen(errors -> errors.flatMap(error -> Observable.timer(100, TimeUnit.MILLISECONDS)))
.subscribe(o -> refreshListNow());
UPDATE: someObservable
是Subject
(總線)我在觀察UI事件。
看到我的評論如下,因爲它似乎retry()
這裏行不通怎麼一會想到(即重試不會造成光源自動重新發射的最後一個值,除非我也許使用BehaviorSubject
- 這ISN這裏不適合)。
我已經試過上述變異,但是現在在「retryWhen」代碼似乎被觸發,即使沒有任何錯誤,然後認購似乎完全消失。 – strangetimes
我應該補充說'可觀察'是一個主體(公共汽車)......也許這改變了事物? – strangetimes
兩個小問題 - 'Observable.just(null)'在RxJava 2中不起作用,我會使用'.map'而不是'.flatMap'。一個主題可能會改變一些事情 - 引用[RxRelay的項目頁面](https://github.com/JakeWharton/RxRelay):「主題對於縮小非Rx API之間的差距非常有用,但它們有損於有狀態:當他們收到onComplete或onError時,他們不再可用於移動數據,這是可觀察的合同,有時候是期望的行爲,大多數情況下不是。 – ahmedre