2017-10-04 77 views
0

您好我有下面的代碼塊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

回答

1

您可以使用一個修真通過以下方式做你的東西:

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

1

如果你想,step要返回時,所有的動作都完成,只返回在最後map塊。

爲了提高代碼效率,問題可能不在您提供的代碼片段中,而是在processStepPrerequisitesDTO方法中。

+0

試過這個,但沒有改變行爲。 在DTOs我只有數據庫調用與光滑 – Felix