What is the use case for doOnSuccess vs onSuccess in rxJava
11,670
Singles and Maybes have a success signal and the handler has the onSuccess
method called. Often though, you'd want to side-effect the success signal at various points in the flow so there is the doOnSuccess
operator.
getUserAsSingle()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnSuccess(user -> ui.showUser(user))
.flatMap(user ->
getUserFavoritesAsSingle(user)
.subscribeOn(Schedulers.io())
)
.observeOn(AndroidSchedulers.mainThread())
.doOnSuccess(userFavs -> ui.showUserFavorites(userFavs))
.flatMap(userFavs ->
updateLoginCounter(userFavs.userId)
.subscribeOn(Schedulers.io())
)
.observeOn(AndroidSchedulers.mainThread())
subscribe(newCounter -> ui.showLoginCount(newCounter),
error -> ui.showError(error));
Comments
-
Bulma almost 2 years
I'm confusing about use case for doOnSuccess in rxJava.
Let's see the code:Case 1:
networkApi.callSomething() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .doOnSuccess(__ -> showLog(SUCCESS)) .doOnError(__ -> showLog(ERROR)) .subscribeBy( onSuccess = {//Do something}, onError = {//Show log here} )
Case 2:
networkApi.callSomething() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribeBy( onSuccess = { //Do something showLog(SUCCESS) }, onError = {showLog(ERROR)} )
As normal, I think case 2 is fine.
I also have referred some source code in github and I saw some people do like case 1.
I try to ask myself what is the use case fordoOnSuccess
here ?Is there any use case that we need apply
doOnSuccess()
operator ? -
Bulma about 5 yearsIs there any case to use those method together ? And which one will be called first ?
-
Bach Vu about 5 yearsI have not yet found any difference between 2 of them, it is kind of based on your preference when you use them together