1
AIM:何かが変更されたときに、ユーザーがリストをスクロールしなくても、アダプタを更新します。doOnNext内にスローされたRxJavaの再試行
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
私は、 'observable'がSubject(バス)であると付け加えるべきでしょう。 – strangetimes
2つのマイナーなこと - Observable.just(null) 'はRxJava 2では動作しません。' .flatMap'の代わりに '.map'を使用します。 「RxRelayのプロジェクトページ」(https://github.com/JakeWharton/RxRelay)を引用すると、件名が変更される可能性があります。「被験者は非Rx API間のギャップを埋めるのに便利ですが、彼らはonCompleteまたはonErrorを受け取ったときにも、データの移動には使用できなくなります。これは観測可能な契約であり、時にはそれが望ましい動作です。 – ahmedre