scala将对象添加到Seq[Future[Model]],并等待完成返回

scala将对象添加到Seq[Future[Model]],并等待完成返回,scala,playframework,Scala,Playframework,您好,在我的scala应用程序中,我想返回一个Seq[Model]到我的前端 def getContentComponentUsageSearch: Action[AnyContent] = Action.async { implicit request => println(request.body.asJson) request.body.asJson.map(_.validate[StepIds] match { case JsSuccess(stepId

您好,在我的scala应用程序中,我想返回一个Seq[Model]到我的前端

def getContentComponentUsageSearch: Action[AnyContent] = Action.async { implicit request =>
    println(request.body.asJson)
    request.body.asJson.map(_.validate[StepIds] match {
      case JsSuccess(stepIds, _) =>

        println("VALIDE SUCCESS -------------------------------")

        var templates: Seq[Future[Option[ProcessTemplatesModel]]] = Future.sequence(stepIds.s.map(s => {
          processTemplateDTO.getProcessStepTemplate(s.processStep_id).flatMap(stepTemplate => {
            templates :+ processTemplateDTO.getProcessTemplate(stepTemplate.get.processTemplate_id.get)
          })
        }))

        templates.map(done => {
          Future.sequence(templates).map(a => {
            Ok(Json.obj("id" -> a))
          })
        })




      case JsError(_) =>
        println("NOT VALID -------------------------------")
        Future.successful(BadRequest("Process Template not create client"))
      case _ => Future.successful(BadRequest("Process Template create client"))
    }).getOrElse(Future.successful(BadRequest("Process Template create client")))
  }
我需要等到它完成,然后再回来。实现这一目标的好方法是什么

提前谢谢

更新:

目前我正在尝试:

 val fList: List[Future[ProcessTemplatesModel]] +: stepIds.s.map(s => {
             processTemplateDTO.getProcessStepTemplate(s.processStep_id).map(stepTemplate => {
              processTemplateDTO.getProcessTemplate(stepTemplate.get.processTemplate_id.get).map(a => {
                a.get
              })
            })
          })

        Future.successful( Ok(Json.obj("id" -> fList)))

本例中的问题是
+:
我认为。

我认为您只需重写此部分:

templates.map(done => {
          Future.sequence(templates).map(a => {
            Ok(Json.obj("id" -> a))
          })
        })
如果你想这样做:

val futSeqOpt: Future[Seq[Option[ProcessTemplatesModel]]] = Future.sequence(templates)
val futSeq: Future[Seq[ProcessTemplatesModel]] = futSeqOpt.map(_.getOrElse("defaultValue"))

futSeq.map(seq => Ok(Json.toJson(seq)))

它应该会起作用。(我只添加了用于演示的类型)。

比较这些类型!它必须是
Future[List[ProcessTemplatesModel]]
。然后您可以将它映射到
futSeq.map(fList=>Ok(Json.obj(“id”->fList))
ah我认为
模板是正确的。如果没有领域模型知识,正确的实现是很困难的。