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