我对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()
运算符的用例?
答案 0 :(得分:0)
我通常申请doOnSuccess()
的一个用例是在呼叫成功时强制执行一些触发器。例如,我有一个函数可以在通用类中获取用户数据
fun getUserData(userId: Int) {
userDataApi(userId)
.doOnSuccess { fetchAllImages() }
.doOnError { Log.e(it) }
}
如您所见,还没有订阅。想要使用上述功能的人可以稍后再调用它。
getUserData
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe()
如果getUserData
成功,它将始终调用fetchAllImages()
。
答案 1 :(得分:0)
Single和Maybes发出成功信号,处理程序调用{{1}}方法。不过,通常情况下,您希望在流程中的各个点都对成功信号产生副作用,因此有onSuccess
运算符。
doOnSuccess