Ich habe um mit retryWhen() Methode zu spielen, und ich bemerkte, dass, wenn Sie Filter verwenden() innerhalb retryWhen() und wenn filter() versagt gibt es keinen Rückruf ausgeführt nicht einmal onCompleted(). Kannst du mir bitte erklären, warum passiert das? Danke im Voraus.RxJava2 mit retryWhen mit Filter
Der Arbeits Fall:
Observable.error(new RuntimeException())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.retryWhen(errors -> errors
.filter(throwable -> throwable instanceof RuntimeException)
.zipWith(Observable.range(1, 3), (throwable, retryCount) -> {
Log.i("lol", "retry " + retryCount);
return retryCount;
}))
.subscribe(e -> Log.i("lol", "onNext"), throwable -> Log.i("lol", "onError"),() -> Log.i("lol", "onCompleted"));
Die Arbeitsleistung:
I: retry 1
I: retry 2
I: retry 3
I: onCompleted
Aber wenn ich die Filter mit filter(throwable -> throwable instanceof IOException)
verändern die beobachtbar ist wie in einem gefrorenen Zustand. Kein Rückruf ausgelöst.
Observable.error(new RuntimeException())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.retryWhen(errors -> errors
.filter(throwable -> throwable instanceof IOException)
.zipWith(Observable.range(1, 3), (throwable, retryCount) -> {
Log.i("lol", "retry " + retryCount);
return retryCount;
}))
.subscribe(e -> Log.i("lol", "onNext"), throwable -> Log.i("lol", "onError"),() -> Log.i("lol", "onCompleted"));
Danke für die info.Yeah Ich habe 'if' Anweisung verwendet, aber wollte nur versuchen, wenn es mit' filter() 'auch funktioniert. Ich würde allerdings erwarten, dass in diesem Fall mindestens die 'onCompleted()' Methode aufgerufen wird. – santalu
Da der Bediener nichts wieder hört, wird es nichts tun. Das Observable, das für Ihre Funktion bereitgestellt wird, wird erst abgeschlossen, wenn die Quelle vollständig ist. –