Ich bin auf Funktionen gestoßen, die Future
zurückgeben, aber auch Ausnahmen sofort auslösen. Zum Beispiel so:
Dieses Verhalten scheint für den Aufrufer lästig zu sein, weil Sie so etwas machen müssen, um beide Fehler zu erfassen:
%Vor% Ich habe bemerkt, dass das WSClient
im play-Framework dies tut (beide werfen Ausnahmen, wenn die URL fehlerhaft ist, und gibt Future
zurück, was fehlschlägt, wenn die HTTP-Anfrage fehlschlägt).
Ist das eine gute Praxis? Gibt es eine bessere Möglichkeit, Fehler von Funktionen zu behandeln, die sich so verhalten?
Future
wird verwendet, um irgendwann etwas zurückzugeben, aber es ist nicht klar, wann dies tatsächlich passiert.
Aus einer .NET-Perspektive kommend (wir haben Task
): Eine Ausnahme sollte ausgelöst werden, wenn die Anfrage eindeutig ungültig ist (z. B. eine ungültige URL). Sie kennen das bereits, bevor Sie die Webanfrage stellen. Es besteht keine Notwendigkeit, die Ausnahmen zu verzögern.
Andererseits, wenn der Server ausgefallen ist (Timeout?) oder der Server etwas zurückgibt, was Ihr Client nicht versteht: Dies kann und muss zu einem späteren Zeitpunkt gehandhabt werden, da die Antwort nicht direkt zur Verfügung steht Anruf. Wir wären in der Lage zu blockieren, bis die Antwort verfügbar ist, aber das Future
nutzlos machen würde.
Ich denke, das ist am besten mit dem Programm "Exit Early" zu vergleichen.
Tags und Links scala