如何处理多个单打?

时间:2019-08-31 13:39:52

标签: rx-java2 rx-kotlin2

我正在使用rxjava2存根在grpc上编写Messenger服务器,并且坚持合并单打。

我已经尝试过某种

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

那么看起来所有示例都不美观,那么有没有办法将所有这些单曲组合成一行?

1 个答案:

答案 0 :(得分:0)

首先要发表一点评论,通常您不想使用blockingGet。取而代之的是,您使用其他组合器来组合您的解决方案,最后使用订阅对其进行评估。

我假设您要合并多个返回Single的调用,而下一个调用的结果取决于上一个。

您要寻找的组合器是flatMap

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

在这里,返回类型将是Single返回值的someMethod

您将在需要时使用subscribe来获得该价值。