2017-09-01 15 views
-2

これは難しいことではないと思いますが、私はfuturesに苦労してオブジェクトを追加します。Intを不変のSeqに追加しています。私はseqを定義しなければならないのと、それはFutures取り扱いますので、どのように私はそれを返す必要がありますか?不変のSeqに先物を追加して返します

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

アイデア?前もって感謝します!

+0

最初に[documentation](http://docs.scala-lang.org/overviews/collections/overview.html)をご覧になり、試してみてください – cchantep

答えて

0

List[Future[A]]Future[List[A]]に変換して結果として返すことができます。まず、steps.foreachcopyという変数を定義しないでください。代わりにsteps.mapを使用してをprocessTemplateDTO.createCopyOfStepTemplatesから取得し、mapは将来の結果リスト-を返します。その後、Future.sequenceで結果を変換し、最後にJsonオブジェクトとして返すことができます。

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)) 
} 
関連する問題