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完成

什么是解决这个问题的好方法?感谢

enter image description here

+0

该代码在可读性方面获得“很多”使用理解 – cchantep

您可以使用一个修真通过以下方式做你的东西:

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也是一个未来。

+0

上述postet片段是在Future.sequence() 当我复制你的codeI有很多错误 – Felix

+0

processSteps未来? –

+0

是的,这是一个未来 – Felix

如果你想,step要返回时,所有的动作都完成,只返回在最后map块。

为了提高代码效率,问题可能不在您提供的代码片段中,而是在processStepPrerequisitesDTO方法中。

+0

试过这个,但没有改变行为。 在DTOs我只有数据库调用与光滑 – Felix