私はFuture
を返す関数を見つけましたが、すぐに例外をスローします。たとえば、次のように:あなたは両方のエラーをキャッチするために、このような何かをしなければならないのでFuture [A]を返す関数は例外をスローする必要がありますか?
def func(): Future[String] {
if (something) {
// this
Future.failed(new RuntimeException("test"))
} else {
// and this
throw new RuntimeException("test")
}
}
この動作は、呼び出し元に対する迷惑なようだ:
try {
func() recover {
case e: Exception => handleError(e)
}
} catch {
case e: Exception => Future.successful(handleError(e)) //or Future.failed etc
}
私がプレイ枠組みの中でWSClient
がないことに気づきましたこれは、URLが不正な場合は例外をスローし、HTTP要求が失敗した場合は失敗するFuture
を返します。
これは良い方法ですか?このように動作する関数からエラーを処理するには、より良い方法がありますか?
いいえ、例外を使用することはおすすめできません - http://programmers.stackexchange.com/questions/223329/side-effects-side-effects-breaking-referential-transparencyおそらく 'Future [A、B]]を使ってhttps://www.reddit.com/r/scala/comments/3r5ii6/on_handling_futureeithera_b_sequencing/に合っているでしょう。 –
@KevinMeredith私は[A、B]のいずれかを使用してエラーを予測していますが、ここでの問題はそれらを区別する方法ではなく、例外をスローして予期せぬ失敗に対して失敗した先物を返す必要があるかどうかです。 )。 –