Scala wiederherstellen oder wiederherstellen
Entwickeln wir einige Systeme in unserem Unternehmen in Scala, und wir haben einige Zweifel. Wir diskutierten darüber, wie die Karte der Zukunft Ausnahmen und wir wissen nicht, Wann sollte man mit der option 1 oder der option 2.
val created: Future[...] = ???
Option 1:
val a = created recover {
case e: database.ADBException =>
logger.error("Failed ...", e)
throw new business.ABusinessException("Failed ...", e)
}
Option 2:
val a = created recoverWith {
case e: database.ADBException =>
logger.error("Failed ...", e)
Future.failed(new business.ABusinessException("Failed ...", e))
}
Könnte jemand erklären, Wann sollte ich die option 1 oder der option 2? Was ist der Unterschied?
InformationsquelleAutor der Frage Henrique Goulart | 2016-04-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nun, die Antwort ist klar beschrieben in scaladocs:
recover
wraps Ebene führenFuture
für Sie (Analogmap
), währendrecoverWith
erwartetFuture
als das Ergebnis (AnalogflatMap
).So, hier ist die Faustregel:
Wenn Sie wieder mit etwas bereits gibt
Future
verwendenrecoverWith
verwenden, ansonstenrecover
.upd
In deinem Fall, mit
recover
wird bevorzugt, darecover
wird wickeln Sie Ihre Ausnahme inFuture
für Sie. Ansonsten gibt es keinen performance-Gewinn oder nichts, so kann man einfach vermeiden, dass einige boilerplate.InformationsquelleAutor der Antwort Aivean
Mit
recoverWith
Sie werden gebeten, die Rückgabe einem verpackt Zukunft, mitrecover
Sie gefragt werden, um eine exception zu werfen.Ich lieber mit
recoverWith
weil ich denke, die funktionale Programmierung bevorzugt Rücksendung Objekte als das werfen von Ausnahmen, die weniger von einem funktionalen Stil, auch wenn es interne code-block, ich denke, es hält immer noch..Jedoch, wenn ich einen internen code in das recovery-block, der eine Ausnahme auslösen könnte dann, in diesem Fall, anstatt fangen und wickeln Sie es mit
Future
oder es zu Versuchen, könnte ich genauso gut laufen dieses Stück code in Kombination mitrecover
und es würde die Ausnahme behandeln Verpackung für Sie, die machen den code besser lesbar und kompakt.InformationsquelleAutor der Antwort Tomer Ben David