如何处理多单?

How to handle a multiple singles?

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

我已经尝试过一些

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

比起所有的样例都显得不美观,请问有没有什么办法可以把这些单曲合为一条线呢?

先提个小意见,通常你不想用blockingGet。相反,您使用其他组合器来组合您的解决方案,最后您使用订阅来评估它。

我假设您想合并 return 和 Single 的多个调用,其中下一个调用的结果取决于前一个。

您要查找的组合子是flatMap

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

这里的 return 类型将是 Single 任何 someMethod returns.

您可以在需要时使用 subscribe 获取该值。