playframework scala代码效率和未来的问题
playframework scala code efficiency and future problems
您好,我有以下代码块
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
})
})
我想从数据库中获取一些数据,然后我必须重新组织这些数据。
有效...但效果不佳
问题是:
1) 代码效率不高
2) 通常 returns 没有中间部分 processStepPrerequisite
的步骤已完成
解决这个问题的好方法是什么?谢谢
如果您想要 step
在所有操作完成后被 return 编辑,只需 return 它在最后一个 map
块中。
为了代码的效率,问题可能不在您提供的代码段中,而在 processStepPrerequisitesDTO
方法中。
您可以使用 for comprehension 按以下方式处理您的工作:
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 也是一个 Future。
您好,我有以下代码块
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
})
})
我想从数据库中获取一些数据,然后我必须重新组织这些数据。
有效...但效果不佳
问题是:
1) 代码效率不高
2) 通常 returns 没有中间部分 processStepPrerequisite
的步骤已完成
解决这个问题的好方法是什么?谢谢
如果您想要 step
在所有操作完成后被 return 编辑,只需 return 它在最后一个 map
块中。
为了代码的效率,问题可能不在您提供的代码段中,而在 processStepPrerequisitesDTO
方法中。
您可以使用 for comprehension 按以下方式处理您的工作:
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 也是一个 Future。