我正在使用Scala,Play Framework 2.1.x和reactivemongo驱动程序。为什么Future的恢复不会捕获异常?
我有一个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。
我目前包裹异步有:
try{
Async {...}
} catch {
case _ => BadRequest("")
}
这抓住了错误。
我在网上浏览了一些Scala的Future文档,我很困惑为什么恢复不适合我。
有谁知道为什么?我想把它排除在外?
到底什么是“失败的未来”? – ps0604
@ ps0604:'Future.failed(<你抓到的异常>)' –