如果我在Kotlin中使用Single
进行Retrofit
调用,我想检查结果答案并继续处理Single
或错误。例如
model.doRequest()
.flatMap { t: Response ->
if(!h.hasError) {
return@flatMap model.doAnotherRequest()
} else {
return@flatmap Single.error<Throwable>(Throwable("error))
}
}
如果我再做一个flatMap()
,subscribe()
或其他任何事情,RxJava不会知道我要继续执行doAnowhtRequest()
给出的响应,而是返回{{1 }}。我如何获取第二个请求给出的数据?
在Java中,Any!
未得到解释,因此RxJava将在下一次调用时继续给我响应。
答案 0 :(得分:2)
假设您要返回与doAnotherRequest()
相同的内容,则问题出在Single.error<Throwable>(Throwable("error))
上。您正在找到要返回Single<Throwable>
的编译器,但是要返回Single<whatever doAnotherRequest returns>
。
假设您的doAnotherRequest
返回Single<Foo>
,然后您想返回Single.error<Foo>(Throwable("error))
,它将返回一个在给定异常下将发出错误的单。
Kotlin尝试推断要返回的类型,但是由于您要返回“最常见”类型为Any
的2种类型,因此Kotlin只能推断您要返回的类型。