2014-05-11 24 views
1

我想要一個函數返回一個Future[Option[String]]並與噴霧路由的onComplete指令一起使用。但無論我做什麼,我似乎都無法得到它的工作。問題與噴霧路由和未來[選項[字符串]]

比方說,我有以下功能:

def expensiveOperation: Future[Option[String]] = { ... do stuff ... } 

然後我想定義的我Route一部分這樣:

onComplete(expensiveOperation) { 
    case Success(string) => complete(string) 
    case Failure(_) => complete("failure") 
} 

有沒有辦法做到這一點沒有寫一個單獨的功能將Future[Option[String]]轉換爲基本的Future[String]

回答

6
onComplete(expensiveOperation) { 
    case Success(Some(string)) => complete(string) 
    case _ => complete("failure") 
} 

或:

onComplete(expensiveOperation.map(_.get)) { 
    case Success(string) => complete(string) 
    case Failure(_) => complete("failure") 
} 
+0

這些都非常優雅,但由於某種原因,我不能讓它去。當我運行一個非常簡單的函數返回一個'Future [Option [String]]'時,一切運行良好,但我有一個函數查詢Riak並返回一個'Future [Option [String]]'並且自行工作得很好但似乎在Spray路由上下文中默默無聞。嗯。 – lucperkins