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));
Share:
11,670
Bulma
Author by

Bulma

Never give up !

Updated on June 15, 2022

Comments

  • Bulma
    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 for doOnSuccess here ?

    Is there any use case that we need apply doOnSuccess() operator ?

  • Bulma
    Bulma about 5 years
    Is there any case to use those method together ? And which one will be called first ?
  • Bach Vu
    Bach Vu about 5 years
    I have not yet found any difference between 2 of them, it is kind of based on your preference when you use them together