scala Playframework删除未来并分配它

Fel*_*lix 1 scala playframework playframework-2.0

我对以下代码段有疑问

val prerequisiteFuture = processStepPrerequisitesDTO.getProcessStepPrerequisiteProcessTemplateIds(step.id.get)
prerequisiteFuture.map(prereqTemplates => {
  processTemplateDTO.getProcessTemplates(prereqTemplates).map(pres => {
    step.stepPrerequisites = Some(pres)
    step.prerequisites = processStepPrerequisitesDTO.getProcessStepPrerequisitesByProcessTemplateId(step.id.get).map(preReqs => {
      preReqs
    })
    step
  })
})
Run Code Online (Sandbox Code Playgroud)

问题如下: 在此输入图像描述

found : scala.concurrent.Future[Seq[models.ProcessStepPrerequisitesModel]]* [error] required: Option[Seq[models.ProcessStepPrerequisitesModel]]

我怎样才能删除未来?谢谢

pam*_*amu 5

除非你等待未来最终完成处理管道,否则没有办法摆脱Future.

使用map和flatMap或for-understanding理解Future.

让我们说你有def foo: Future[A]你想要的B

改变未来

foo.map(toB)
Run Code Online (Sandbox Code Playgroud)

现在你会得到Future[B].但是如果B没有未来完成执行,就没有办法获得价值.

在没有等待的情况下,摆脱Future的唯一方法就是等待它完成,但返回类型将是Unit.

futureComputation.onComplete {
  case Success(_) =>
  case Failure(_) =>
}
Run Code Online (Sandbox Code Playgroud)

不好的做法

import scala.concurrrent.duration._

Try(Await.result(prerequisiteFuture, 10.seconds)).toOption
Run Code Online (Sandbox Code Playgroud)

更多信息:在db调用上调用Await.result有多大的风险