J'ai joué avec retryWhen() méthode et j'ai remarqué que si vous utilisez filtre() intérieur retryWhen() et si filtre() échoue il n'y a pas de rappel exécuté même pas onCompleted(). Pouvez-vous m'expliquer pourquoi cela se passe? Merci d'avance.RxJava2 à l'aide retryWhen avec filtre
Le cas de travail:
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"));
La sortie de travail:
I: retry 1
I: retry 2
I: retry 3
I: onCompleted
Mais quand je l'ai changé le filtre avec filter(throwable -> throwable instanceof IOException)
l'observable est comme dans un état congelé. Aucun rappel n'a été déclenché.
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"));
Merci pour l'info.Yeah J'utilisais l'instruction 'if' mais je voulais juste essayer si ça fonctionnait avec' filter() 'aussi. Bien que je m'attendrais au moins à la méthode 'onCompleted()' appelée dans ce cas. – santalu
Encore une fois, puisque l'opérateur n'entend rien, il ne fera rien. L'observable fourni à votre fonction ne sera pas complet à moins que la source ne soit complète. –