2013-07-12 33 views
0

我正在使用Play Framework(2.0.4)和Scala,并且遇到问题。我调用我的后端来获取用户列表(对于json),并且对于每个用户,我必须从后端获取额外信息(每个用户一个请求)。Scala和play Framework的嵌套请求

所以在我的服务,我有:

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)) 
} 
} 

。你们有什么想法,该怎么办呢? (这段代码不起作用,但这就是我所做的一切...)

回答

0

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

看到the Play! Scala API here