Я использую Scala, Play Framework 2.1.x и драйвер reiventemongo.
У меня есть вызов api:
def getStuff(userId: String) = Action(implicit request => {
Async {
UserDao().getStuffOf(userId = userId).toList() map {
stuffLst => Ok(stuffLst)
}
}
})
Он отлично работает в 99% случаев, но иногда он может терпеть неудачу (неважно, почему, это не проблема).
Я хотел восстановить в случае ошибки, поэтому добавил:
recover { case _ => BadRequest("")}
Но это не избавит меня от ошибок.
Я попробовал ту же концепцию на консоли scala, и она сработала:
import scala.concurrent._
import scala.concurrent.duration._
import ExecutionContext.Implicits.global
var f = future { throw new Exception("") } map {_ => 2} recover { case _ => 1}
Await.result(f, 1 nanos)
Это возвращает 1, как ожидалось.
Я в настоящее время завернул Async с помощью:
try{
Async {...}
} catch {
case _ => BadRequest("")
}
И это уловляет ошибки.
Я просмотрел несколько документов scala Future в сети, и я озадачен, почему восстановление не работает для меня.
Кто-нибудь знает, почему? Что мне не хватает, чтобы разобраться?