的理解以劇本框架控制器內部下面的代碼:處理選項裏面對於期貨
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