Ich benutze Scala, Play Framework 2.1.x und reactivemongo Treiber.Warum erkennt die Wiederherstellung von Future keine Ausnahmen?
Ich habe einen API-Aufruf:
def getStuff(userId: String) = Action(implicit request => {
Async {
UserDao().getStuffOf(userId = userId).toList() map {
stuffLst => Ok(stuffLst)
}
}
})
Es funktioniert gut 99% der Zeit, aber es kann manchmal nicht (spielt keine Rolle, warum, das ist nicht das Problem ist).
Ich wollte in einem Fall eines Fehlers erholen, so dass ich hinzugefügt:
recover { case _ => BadRequest("")}
Aber das hat mich nicht erholen von Fehlern.
habe ich versucht, das gleiche Konzept auf der scala Konsole und es funktionierte:
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)
Dieses 1 kehrt wie erwartet.
Ich wickelte derzeit die Async mit:
try{
Async {...}
} catch {
case _ => BadRequest("")
}
Und die Fehler fängt.
Ich ging über einige Scala's Future Docs im Netz und ich bin verwirrt, warum Erholung für mich nicht funktioniert hat.
Weiß jemand warum? Was vermisse ich, um es zu klären?
was genau ist ein „failed Zukunft“? – ps0604
@ ps0604: 'Future.failed ()' –