2014-05-11 25 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