使用Scala和play Framework嵌套请求

时间:2013-07-12 13:52:38

标签: asynchronous playframework-2.0 scala-2.10

我正在使用Play Framework(2.0.4)和Scala,我遇到了问题。

我调用后端获取用户列表(在json中),对于每个用户,我必须从后端获取额外信息(每个用户一个请求)。

所以在我的服务中,我有:

def getUsers(/*different uninteresting parameters*/ ): Promise[List[Option[User]]]

def getExtraUserInfo(user:User):Promise[Option[Double]]

因此,对于getUsers返回的每个用户,我想调用getExtraUserInfo,并返回用户以及每个用户的额外信息。

所以在我的控制器中,我试图做那样的事情:

def getUsers(/*parameters*/) = AuthenticatedAsync{ request =>
val users = UserService.getUsers(/*parameters*/)

  users.flatMap {
  case Some(userList) => 
    Ok(Success("users" -> Json.toJson(userList.flatMap{
      user => UserService.getExtraUserInfo(user).map {
        case Some(price) => user.price = price
          user
        case _ => user
      }
    }.map(_.json))))
  case _ => InternalServerError(Error("error while getting users", Errors.TECHNICAL))
}
}

你们有任何想法怎么做吗? (这段代码不起作用,但这就是我设法做的所有......)

1 个答案:

答案 0 :(得分:0)

尝试Promise.sequence对承诺列表进行排序。 Promise.sequence将List[Promise[T]]转换为Promise[List[T]] ...

请参阅the Play! Scala API here