2014-07-02 41 views
1

我正在写一个Spray + Akka小型服务器。博客文章脱颖而出,并推荐了这种询问模式。该CapserOk类对此有着signiture:Akka询问未来恢复模式

case class CasperOk(company: Option[Company.Company], existOrNot: Boolean)

我检索这个数据库行,如果它不存在或发生一些错误,我要送出去,从喷雾告诉客户端的响应。

但是,使用这种模式,我不知道在哪里注入开关。

我试图把代码改成这样:

val response = (secCompanyActor ? jObjectFromCasper(company)) 
       .mapTo[CasperOk] 
       .map(result => result.succeedOrNot match { 
        case true => (OK, "transaction successful") 
        case false => (Conflict, "FileLoc format is wrong or it already exists") 
       }) 
       .recover{case _ => (InternalServerError, "error occured! We will fix this")} 

    complete(response) 

喷雾使用complete()发送一个HTTP响应。 complete()可以带两个对象,或一个字符串/可序列化的对象。我想要使​​用两种对象模式(它允许我手动编码标题),理想情况应该看起来像complete(response._1, response._2)

有没有什么方法可以通过Akka的未来来实现?

回答

4

您可以通过在将来的onComplete方法中注册一个调用完成函数来实现此目的。

response.onComplete { 
    case (statusCode, message) => complete(statusCode, message) 
}