【发布时间】:2019-05-01 03:53:15
【问题描述】:
-
使用 Retrofit 的 API 类
类接口 TestApi { @GET("/path/abc/xyz") 有趣的get():单 } -
用例类
有趣的 getResult(): 单 { 返回 testApi.get() .map{ 响应 -> val type = response.type 何时(类型){ 空 -> 抛出异常() 其他 -> 响应 } } .retryWhen{ throwableHandler -> throwableHandler.flatMap { 当(它){ 是 Exception() -> Flowable.error(it) 否则-> Flowable.timer(3,TimeUnit.SECONDS) } } } .timeout(60, TimeUnit.SECONDS) } -
MainClass.kt
用例.getResult() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribeBy(onError = {Log.d(TAG,"Error")}, onSuccess = {Log.d(TAG,"Next")}) 应用运行时:
如果 api 返回 NULL,将调用 retryWhen() 然后再次调用 api。 事件未达到超时且 api 返回 Not NUL 结果 -> onSuccess 被调用。这是在 rxJava 中正确处理 retryWhen() 运算符。
我的问题:
如果我在 MainClass.kt 中编写一些测试方法(假装 API Retrofit),如下所示:
private fun testPretend(): Single<Animal> {
return Single.just(Animal)
}
MainClass.kt 看起来像:
testPretend()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeBy(onError = {Log.d(TAG,"Error")},
onSuccess = {Log.d(TAG,"Next")})
所以事件 retryWhen 被调用,testPretend() 方法不再被调用。
这里有什么问题?
testPrerend() 的 Single return 和 Retrofit API 有什么区别?
【问题讨论】:
-
fun get() : Single
-
fun getResult(): Single
-
抱歉我无法格式化描述@@
标签: retrofit observable retrofit2 rx-java2 rx-android