我对rxJava中的doOnSuccess用例感到困惑。
让我们看一下代码:

情况1:

networkApi.callSomething()
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .doOnSuccess(__ -> showLog(SUCCESS))
    .doOnError(__ -> showLog(ERROR))
    .subscribeBy(
             onSuccess = {//Do something},
             onError = {//Show log here}
          )


情况2:

networkApi.callSomething()
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribeBy(
             onSuccess = {
               //Do something
               showLog(SUCCESS)
             },
             onError = {showLog(ERROR)}
          )


通常,我认为情况2很好。
我还在github中引用了一些源代码,我看到有些人喜欢案例1。
我试图问自己,这里doOnSuccess的用例是什么?

是否有需要使用doOnSuccess()运算符的用例?

最佳答案

Singles和Maybes发出成功信号,处理程序调用onSuccess方法。通常,您会希望在流程的各个点上对成功信号产生副作用,因此有doOnSuccess运算符。

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));

07-25 22:25