2017-08-07 1 views
1

ich habe die folgende Funktion:scala playframework Rückkehr Ok in 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"))) 
    } 

Ich möchte die Schritte in der Ok-Anweisung zurück, aber habe diesen Fehler:

enter image description here

was könnte das Problem in diesem Fall?

dank

+0

'' flatMap'' erwartet ein '' Future [T] '' aber du gibst nur ein '' OK'' zurück. Versuchen Sie, es in '' Future.successful'' – alifirat

+0

wie folgt einzubinden: 'processTemplateDTO.getProcessStepTemplates (process.id.get) .flatMap ( Schritte => Future.successful (Ok (Json.obj (" id "-> process.id, "title" -> process.title, "steps" -> steps)))) – Felix

+0

hat den gleichen Fehler – Felix

Antwort

2

Versuchen Sie diesen Code:

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

}

Ich habe die map und flatMap geschaltet, die sich um processTemplateDTO Methoden erscheinen nennt. In der ersten brauchen Sie flatMap, weil Sie eine Future zurückgeben, aber in der zweiten möchten Sie eigentlich eine map, weil Sie eine Result zurückgeben.

+0

danke! es funktioniert einwandfrei vielen Dank – Felix

+0

Kein Problem :) Freut mich zu hören, dass ich geholfen habe. –

Verwandte Themen