2017-10-07 78 views
0

我有這樣期待列表[未來],如果未來失敗,該怎麼辦?

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

IP地址的列表我使用該列表做HTTP GET通過我的包裝的要求得到方法,而我的包裝get方法將拋出BadRequestException如果響應狀態是400。我明白,如果我得到的所有成功說200因爲myWrapper返回Future[WSResponse],在良好的情況下,我的最終結果將是List[Future[WSResponse]]

範例片段

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

我的困惑和問題是,既然myWrapper能的情況下,拋出一個異常狀態404,其他人還會執行嗎?總之在不好的情況下說一個請求給出404並且說剩下的全部給出200,是否會出現List[WSResponse]的情況,並且對於其中一個元素它將是一個例外?或者情況並非如此,如果一個未來失敗了,其他人甚至可能不會執行?

回答

0

它們都會執行。如果有例外,那麼這個元素將是一個失敗的未來。它仍然會有類型Future[Response],但是如果您嘗試對其使用Await.result,則會引發異常。如果您嘗試進一步轉換(mapflatMap等)失敗Future,則不會發生任何事情(轉換永遠不會執行)。 您可以處理.recover.recoverWith(他們就像.mapflatMap,但只會調用轉換如果未來出現故障),或報告/清理它.onFailure這些例外情況(也有.onSuccess.onComplete,可以同時處理例)。

有一個很好的教程,在這裏處理斯卡拉期貨: https://docs.scala-lang.org/overviews/core/futures.html

相關問題