2017-09-01 3 views
-2

Ich fühle mich wie das ist nicht so schwierig, aber ich habe Probleme mit dem und Hinzufügen von Objekten oder Int s zu einem unveränderlichen Seq.Hinzufügen von Futures zu einem unveränderlichen Seq und Rückgabe

def createCopyOfProcessTemplate(processTemplateId: Int): Action[AnyContent] = Action.async { 
    //val copies = Seq() 

    processTemplateDTO.createCopyOfProcessTemplate(processTemplateId).flatMap { process => 
     processTemplateDTO.getProcessStepTemplates(processTemplateId).map { steps => 
     steps.foreach(processStep => 
      copy: Future[Option[ProcessTemplateModel] = processTemplateDTO.createCopyOfStepTemplates(processTemplateId, process.get.id.get, processStep)) 
      //Seq should look something like this: [{processStep.id, copy.id},{processStep.id, copy.id},...] or [[processStep.id, copy.id],[processStep.id, copy.id],...] 
     } 

    Ok(Json.obj("copies" -> copies)) 
} 

Wo finde ich die seq und wie definieren sollte ich ihn zurückgeben, da es Futures Handling?

Irgendwelche Ideen? Danke im Voraus!

+0

Bitte zuerst an der [Dokumentation] einen Blick (http://docs.scala-lang.org/overviews/collections/overview.html), es versuchen – cchantep

Antwort

0

Sie können mit Future.sequence List[Future[A]] in Future[List[A]] konvertieren und als Ergebnis zurückgeben. Verwenden Sie zunächst nicht steps.foreach mit copy Variable definiert, sondern steps.map, um ProcessTemplateModel als Ergebnis aus processTemplateDTO.createCopyOfStepTemplates zu erhalten, und Karte wird Liste des zukünftigen Ergebnisses zurückgeben - List[Future[Option[ProcessTemplateModel]]. Dann können Sie das Ergebnis mit Future.sequence konvertieren und schließlich als Json-Objekt zurückgeben.

val copies:List[Future[Option[ProcessTemplateModel]] = processTemplateDTO.createCopyOfProcessTemplate(processTemplateId).flatMap { 
process =>processTemplateDTO.getProcessStepTemplates(processTemplateId).map { steps => 
    steps.map(processStep => 
     processTemplateDTO.createCopyOfStepTemplates(processTemplateId, process.get.id.get, processStep)) 
} 
Future.sequence(copies).map{ result => 
    Ok(Json.obj("copies" -> result)) 
}