1

我正在使用 rxjava2 存根在 grpc 上编写信使服务器,并且我坚持结合我的单曲。

我已经尝试过某种

  val user:Single<User> = getUser()
  val conversation:Single<Conversation> = getConversation(user.blockingGet())
  return conversation.map{
      someMethod(user.blockingGet(), conversation.it())
      it
  }

与所有示例相比,它看起来如此不美观,那么有没有办法将所有这些单曲组合成一条线?

4

1 回答 1

0

首先是一个小注释,通常你不想使用blockingGet. 相反,您使用其他组合器来组成您的解决方案,最后您使用 subscribe 来评估它。

我假设您想要组合多个调用,这些调用返回 a Single,其中下一个调用的结果取决于前一个。

您正在寻找的组合器是flatMap.

val user: Single<User> = getUser()
val singleOfSomething: Single<Conversation> = user.flatMap { user-> 
    getConversation(user).flatMap {conversation -> 
        someMethod(user, conversation) 
    }
} 

这里的返回类型将是Single任何someMethod返回。

当你需要它时,你会使用它subscribe来获取该值。

于 2019-09-01T14:31:18.767 回答