2017-08-07 50 views
1
確定返回

我有以下功能:斯卡拉playframework在flatMap

def createProcessTemplate: Action[AnyContent] = Action.async { implicit request => 
    println(request.body.asJson) 
    request.body.asJson.map(_.validate[ProcessTemplatesModel] match { 
     case JsSuccess(process, _) => 
     processTemplateDTO.createProcessTemplate(process).map { 
      process => { 

      // Create process steps templates 
      createNewProcessStepTemplate(request, process.id.get) 


      // Create prerequisites 
      createProcessTemplatePrerequisite(request, process.id.get) 

      // Create postConditions 
      createProcessTemplatePostCondition(request, process.id.get) 

      processTemplateDTO.getProcessStepTemplates(process.id.get).flatMap(
       steps => Ok(Json.obj("id" -> process.id, "title" -> process.title, "steps" -> steps))) 
      } 
     } 
     case JsError(_) => 
     Future.successful(BadRequest("Process Template not create client")) 
     case _ => Future.successful(BadRequest("Process Template create client")) 
    }).getOrElse(Future.successful(BadRequest("Process Template create client"))) 
    } 

我想回到在確定聲明的步驟,但得到這個錯誤:

enter image description here

可能是什麼在這種情況下的問題?

感謝

+0

'flatMap''需要一個''Future'''',但你只返回一個''Ok''。嘗試在''Future.successful''中打包到它'' – alifirat

+0

像這樣:'processTemplateDTO.getProcessStepTemplates(process.id.get).flatMap( steps => Future.successful(Ok(Json.obj(「id」 - > process.id,「title」 - > process.title,「steps」 - > steps))))' – Felix

+0

得到了同樣的錯誤 – Felix

回答

2

試試這個代碼:

def createProcessTemplate: Action[AnyContent] = Action.async { implicit request => 
println(request.body.asJson) 
request.body.asJson.map(_.validate[ProcessTemplatesModel] match { 
    case JsSuccess(process, _) => 
    processTemplateDTO.createProcessTemplate(process).flatMap { 
     process => { 

     // Create process steps templates 
     createNewProcessStepTemplate(request, process.id.get) 


     // Create prerequisites 
     createProcessTemplatePrerequisite(request, process.id.get) 

     // Create postConditions 
     createProcessTemplatePostCondition(request, process.id.get) 

     processTemplateDTO.getProcessStepTemplates(process.id.get).map(
      steps => Ok(Json.obj("id" -> process.id, "title" -> process.title, "steps" -> steps))) 
     } 
    } 
    case JsError(_) => 
    Future.successful(BadRequest("Process Template not create client")) 
    case _ => Future.successful(BadRequest("Process Template create client")) 
}).getOrElse(Future.successful(BadRequest("Process Template create client"))) 

}

我已經關掉出現各地調用processTemplateDTO方法mapflatMap。在第一個中,您需要flatMap,因爲您返回Future,但在第二個中您實際上需要map,因爲您返回Result

+0

thanks!它完美的作品非常感謝你 – Felix

+0

沒問題:)很高興聽到我幫助。 –