我试图弄清楚如何在Play Framework 2.4中的异步操作调用的函数中捕获未来的异常。但是,我使用恢复的代码似乎永远不会被执行 - 我总是得到一个执行异常页面而不是一个Ok响应。
行动代码是:
def index = Action.async {
cardRepo.getAll()
.map {
cards => Ok(views.html.cardlist(cards))
}.recover{
case e: Exception => Ok(e.getMessage)
}
}
cardRepo.getAll中的代码(我已经硬编码了一个新的Exception进行实验)是:
def getAll(): Future[Seq[Card]] = {
implicit val cardFormat = Json.format[Card]
val cards = collection.find(Json.obj())
.cursor[Card]()
.collect[Seq]()
throw new Exception("OH DEAR")
cards
}
我在Stack Overflow上看过类似的问题,但我看不出我做错了什么。
答案 0 :(得分:1)
感谢Mon Calamari - 我想我现在明白了。未来来自collection.find,所以如果里面有错误,我的代码就可以了,但是因为我已经把它放在它上面的函数中,所以那时没有Future。