的理解以剧本框架控制器内部下面的代码:处理选项里面对于期货
val firstFuture = function1(id)
val secondFuture = function2(id)
val resultFuture = for {
first <- firstFuture
second <- secondFuture(_.get)
result <- function3(first, second)
} yield Ok(s"Processed $id")
resultFuture.map(result => result).recover { case t => InternalServerError(s"Error organizing files: $t.getMessage")}
以下是有关功能的一些细节:
function1
回报Future[List]
function2
回报Future[Option[Person]]
function1
andfunction2
can run in par等位基因,但function3
需要两者的结果。
鉴于这一信息,我有一些问题:
- 虽然应用程序是这样的,这个代码是不太可能有不正确的ID叫,我想处理这种可能性。基本上,我想返回
NotFound
如果function2
返回None
,但我无法弄清楚如何做到这一点。 recover
呼叫是否会处理Exception
的任何一个步骤?- 有没有更优雅或习惯的方式来编写这段代码?
我对这种情况增加了另一个依赖关系有点谨慎,但你可能是对的,斯卡拉兹将会得到更多类似的情况。 – Vidya 2014-11-03 16:27:25
它有很多有用的抽象,可以为您节省大量的时间,并使代码更小,我建议您先从http://eed3si9n.com/learning-scalaz/ – 2014-11-03 16:28:57
所以你的解决方案为我工作后,一些调整。但我不知道为什么哈哈。如果你有时间,你能提供一下'optionT'方法的细节吗?什么使得'someOptionT'方法变得必要? – Vidya 2014-11-04 17:55:42