In letzter Zeit habe ich gesehen, dass einige Entwickler konsequent ein Try innerhalb eines Future verwenden, um die Fehlerbehandlung zu erleichtern. Hier werde ich untersuchen, ob dies sinnvoll ist oder ob ein Future für sich allein eine ausreichende Fehlerbehandlung bietet.
Wenn Sie sich den folgenden Code ansehen, gibt es nichts, was ein Future nicht liefern kann, aber ein Try schon: [scala] import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.{Await, Future, Awaitable} import scala.concurrent.duration._ import scala.util.{Versuch, Erfolg, Misserfolg} object Main extends App { // Glückliche Zukunft val happyFuture = Future { 42 } // Düstere Zukunft val bleakFuture = Future { throw new Exception("Massenauslöschung!") } // Wir würden das Ergebnis in eine hypothetische http-Antwort einpacken wollen case class Response(code: Int, body: String) // Dies ist der Handler, den wir verwenden werden def handle[T](future: Future[T]): Future[Response] = { future.map { case Antwort: Int => Antwort(200, antwort.toString) } wiederherstellen { case t: Throwable => Antwort(500, "Oh je!") } } { val result = Await.result(handle(happyFuture), 1 second) println(Ergebnis) } { val result = Await.result(handle(bleakFuture), 1 second) println(Ergebnis) } } [/scala] Nachdem ich darüber nachgedacht habe, könnte ich mir die einzige Situation vorstellen, in der Try in Verbindung mit Future nützlich ist, nämlich dann, wenn ich auf ein Future warte, mich aber noch nicht mit Fehlersituationen beschäftigen möchte. Die Zeiten, in denen ich auf einen Future warten würde, sind in der Praxis allerdings sehr selten. Aber wenn es nötig ist, kann so etwas durchaus funktionieren: [scala] object TryAwait { def result[T](awaitable: Awaitable[T], atMost: Duration): Try[T] = { Try { [/scala] Await.result(awaitable, atMost) } } } Wenn Sie der Meinung sind, dass die Verwendung von Trys innerhalb von Futures einen Mehrwert für Ihre Codebasis darstellt, lassen Sie es mich bitte wissen.
Verfasst von

Dirk Louwers
Unsere Ideen
Weitere Blogs
Contact



