2017-10-07 15 views
0

私は私のラッパーを介したHTTP GETリクエストメソッドを取得し、応答ステータスが400であれば、私のラッパーgetメソッドがBadRequestExceptionをスローします行うには、そのリストを使用して、このリストを期待する[未来]、失敗した未来がある場合はどうなりますか?

val ips = List("ip1", "ip2", "ip3") 

のようなIPアドレスのリストを持っています。私はすべての成功を得るmyWrapperが良い場合には、Future[WSResponse]を返すので、200を言うならば、私の最終的な結果はList[Future[WSResponse]]

例は、スニペットになります理解

def myresponses(ips:List[String]) = { 
    ips.map(ip=>myWrapper(ip)) 
} 

私の混乱と疑問がmyWrapper以降の場合には例外を投げることができるということですステータス404の他の人はまだ実行されますか?要するに、1つのリクエストが404を与え、残りのすべてが200と言う悪いケースでは、それは私がList[WSResponse]を持つケースになるだろう、そして、要素の1つは例外になるだろうか?そうでない場合や、未来が失敗した場合、他の未来は実行されないかもしれませんか?

答えて

0

これらはすべて実行されます。例外がある場合、その要素は失敗した未来になります。それでもタイプFuture[Response]がありますが、その上にAwait.resultを入力しようとすると例外がスローされます。 Futureなどのエラー(mapflatMapなど)をさらに変換しようとすると、何も起こりません(変換は実行されません)。 あなたは(彼らは.mapflatMap似ていますが、将来的に障害が発生した場合にのみ変換を呼び出します).recoverまたは.recoverWithでこれらの例外を処理、またはレポート/ .onFailureでそれをクリーンアップすることができます(.onSuccess.onCompleteもあり、両方を扱うこと症例)。

ここではScalaの先物を扱う上で良いのチュートリアルがあります: https://docs.scala-lang.org/overviews/core/futures.html

関連する問題