我正在使用 Scala、Play Framework 2.1.x 和 reactivemongo 驱动程序。
我有一个 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 文档,我很困惑为什么恢复对我不起作用。
有谁知道为什么?我想念什么来解决它?