我觉得这并不困难,但我正在努力使用futures
并将对象或Int
添加到不可变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))
}
我必须在哪里定义seq
以及如何处理Futures
?
有什么想法吗?提前致谢!
答案 0 :(得分:0)
您可以使用Future.sequence将List[Future[A]]
转换为Future[List[A]]
并返回结果。首先,不要使用steps.foreach
定义copy
变量,而是使用steps.map
从ProcessTemplateModel
获取processTemplateDTO.createCopyOfStepTemplates
,map将返回未来结果列表 - List[Future[Option[ProcessTemplateModel]]
。然后你可以用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))
}