mih*_*o39 7 android rx-java retrofit rx-kotlin
我对 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}
)
Run Code Online (Sandbox Code Playgroud)
案例2:
networkApi.callSomething()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeBy(
onSuccess = {
//Do something
showLog(SUCCESS)
},
onError = {showLog(ERROR)}
)
Run Code Online (Sandbox Code Playgroud)
像往常一样,我认为案例 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));
Run Code Online (Sandbox Code Playgroud)