私は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("")
}
そして、これは、エラーをキャッチ。
私はスカラの未来のドキュメントをネット上で公開しましたが、復旧が私にとってうまくいかなかったのは困惑しています。
誰でも知っていますか?それを並べ替えるのに何が欠けていますか?
「失敗した未来」である正確に何? – ps0604
@ ps0604: 'Future.failed(<あなたが犯した例外>)' –