rxJava中doOnSuccess与onSuccess的用例是什么

时间:2019-03-15 02:49:00

标签: android retrofit rx-java 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}
          )

情况2:

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

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

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

2 个答案:

答案 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