首页 > 解决方案 > kotlin 中的 flatMap()

问题描述

如果我Single使用 Kotlin 中的示例进行调用Retrofit,我想检查结果答案并继续处理 aSingle或错误。例如

model.doRequest()
     .flatMap { t: Response ->
          if(!h.hasError) {
              return@flatMap model.doAnotherRequest()
          } else {
              return@flatmap Single.error<Throwable>(Throwable("error))
          }
      }

如果我做另一个或任何其他事情flatMap()subscribe()RxJava 将不知道我想继续由 给出的响应doAnowhtRequest(),而是会返回Any!。我如何获取第二个请求给出的数据?

在 Java 中,Single.error不解释,因此 RxJava 将在下一次调用中继续给我响应。

标签: androidkotlinretrofit2rx-java2

解决方案


doAnotherRequest()假设您想返回与问题相同的内容Single.error<Throwable>(Throwable("error))。您正在访问要返回 a 的编译器Single<Throwable>,但您想返回 a Single<whatever doAnotherRequest returns>

说你的 return ,然后你会想要 return ,这将doAnotherRequest返回一个单一的,它将发出一个带有给定异常的错误。Single<Foo>Single.error<Foo>(Throwable("error))

Kotlin 尝试推断您想要返回的类型,但是因为您返回的“最常见”类型是 2 种类型,所以Anykotlin 只能推断出您想要返回的类型。


推荐阅读