rxJava 中 doOnSuccess 与 onSuccess 的用例是什么
What is the use case for doOnSuccess vs onSuccess in rxJava
我对 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}
)
案例二:
networkApi.callSomething()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeBy(
onSuccess = {
//Do something
showLog(SUCCESS)
},
onError = {showLog(ERROR)}
)
和往常一样,我认为情况 2 没问题。
我也在 github 中引用了一些源代码,我看到有些人喜欢案例 1。
我试着问自己 doOnSuccess
这里的用例是什么?
有没有我们需要应用 doOnSuccess()
运算符的用例?
我通常申请的一个用例doOnSuccess()
是在调用成功时强制执行一些触发器。例如,我有一个函数可以在 class
中获取用户数据
fun getUserData(userId: Int) {
userDataApi(userId)
.doOnSuccess { fetchAllImages() }
.doOnError { Log.e(it) }
}
如您所见,还没有订阅。想使用上述功能的朋友可以稍后再调用。
getUserData
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe()
如果getUserData
成功,它会一直调用fetchAllImages()
。
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));
我对 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}
)
案例二:
networkApi.callSomething()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeBy(
onSuccess = {
//Do something
showLog(SUCCESS)
},
onError = {showLog(ERROR)}
)
和往常一样,我认为情况 2 没问题。
我也在 github 中引用了一些源代码,我看到有些人喜欢案例 1。
我试着问自己 doOnSuccess
这里的用例是什么?
有没有我们需要应用 doOnSuccess()
运算符的用例?
我通常申请的一个用例doOnSuccess()
是在调用成功时强制执行一些触发器。例如,我有一个函数可以在 class
fun getUserData(userId: Int) {
userDataApi(userId)
.doOnSuccess { fetchAllImages() }
.doOnError { Log.e(it) }
}
如您所见,还没有订阅。想使用上述功能的朋友可以稍后再调用。
getUserData
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe()
如果getUserData
成功,它会一直调用fetchAllImages()
。
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));