2014-05-11 8 views
1

Future[Option[String]]을 반환하는 함수를 사용하고 스프레이 라우팅의 onComplete 지시문과 함께 사용하고 싶습니다. 하지만 내가하는 일과 상관없이 나는 그 일을 할 수없는 것처럼 보입니다.스프레이 라우팅 및 Future [Option [String]] 문제

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]]를 반환하는 함수가 있으며 자체적으로 정상적으로 작동합니다 스프레이 라우팅 컨텍스트에서 자동으로 실패하는 것으로 보입니다. 흠. – lucperkins