playframework Scala代码的效率和未来的问题
问题描述:
您好我有下面的代码块playframework Scala代码的效率和未来的问题
processSteps.map {
step =>
val prerequisiteFuture = processStepPrerequisitesDTO.getProcessStepPrerequisiteProcessTemplateIds(step.id.get)
prerequisiteFuture.map(prereqTemplates => {
processTemplateDTO.getProcessTemplates(prereqTemplates).map(pres => {
step.stepPrerequisites = Some(pres)
// Fetches the ProcessStep Prerequisites
processStepPrerequisitesDTO.getProcessStepPrerequisitesByProcessTemplateId(step.id.get).map(processStepPrerequisites => {
processStepPrerequisites.map(processStepPrerequisite => { // Eintzelne Vorbedingung
// Feteches The Reference to the Process Step Prerequisite Template
processStepPrerequisitesDTO.getProcessStepsPrerequisiteProcessTemplate(step.id.get).map(preReqs => {
preReqs.foreach(preReqRelation => {
processStepPrerequisite.processTemplate_id = preReqRelation.processtemplate
processStepPrerequisite
})
})
processStepPrerequisites
})
step.prerequisites = Some(processStepPrerequisites)
})
step
})
})
我想获取从数据库中的一些数据,然后我不得不reorganisate的一些数据。
它的工作......但没有得到很好的
的问题是:
1)代码的效率不高 2)通常,它在返回步骤并没有middple部分与processStepPrerequisite
完成
什么是解决这个问题的好方法?感谢
答
您可以使用一个修真通过以下方式做你的东西:
val preReqFuture = for{
step <- processSteps
prereqTemplates <- processStepPrerequisitesDTO.getProcessStepPrerequisiteProcessTemplateIds(step.id.get)
pres <- processTemplateDTO.getProcessTemplates(prereqTemplates)
processStepPrerequisites <-processStepPrerequisitesDTO.getProcessStepPrerequisitesByProcessTemplateId(step.id.get)
preReqs <- processStepPrerequisitesDTO.getProcessStepsPrerequisiteProcessTemplate(step.id.get)
} yield (step, pres, processStepPrerequisites, preReqs)
preReqFuture.map{ (step, pres, processStepPrerequisites, preReqs) =>
processStepPrerequisites.map(processStepPrerequisite => {
preReqs.foreach(preReqRelation => {
processStepPrerequisite.processTemplate_id = preReqRelation.processtemplate
processStepPrerequisite
})
})
step.stepPrerequisites = Some(pres)
step.prerequisites = Some(processStepPrerequisites)
step
}.recover {
case error: Throwable => //Deal with error
}
注:我假设processSteps也是一个未来。
答
如果你想,step
要返回时,所有的动作都完成,只返回在最后map
块。
为了提高代码效率,问题可能不在您提供的代码片段中,而是在processStepPrerequisitesDTO
方法中。
+0
试过这个,但没有改变行为。 在DTOs我只有数据库调用与光滑 – Felix
该代码在可读性方面获得“很多”使用理解 – cchantep