kotlin中的flatMap()

时间:2018-07-09 07:37:05

标签: android kotlin retrofit2 rx-java2

如果我在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将在下一次调用时继续给我响应。

1 个答案:

答案 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只能推断您要返回的类型。