喷涂路线问题和未来[选项[String]]

luc*_*ins 1 scala spray

我想采用一个返回a的函数,并将其Future[Option[String]]与spray routing的onComplete指令结合使用.但无论我做什么,我似乎无法让它发挥作用.

假设我有以下功能:

def expensiveOperation: Future[Option[String]] = { ... do stuff ... }
Run Code Online (Sandbox Code Playgroud)

然后我想定义我的一部分Route:

onComplete(expensiveOperation) {
  case Success(string) => complete(string)
  case Failure(_) => complete("failure")
}
Run Code Online (Sandbox Code Playgroud)

有没有办法在不编写单独的函数的情况下将其Future[Option[String]]转换为基本函数Future[String]

win*_*ner 6

onComplete(expensiveOperation) {
  case Success(Some(string)) => complete(string)
  case _ => complete("failure")
}
Run Code Online (Sandbox Code Playgroud)

要么:

onComplete(expensiveOperation.map(_.get)) {
  case Success(string) => complete(string)
  case Failure(_) => complete("failure")
}
Run Code Online (Sandbox Code Playgroud)