鑑於整數以下List
...斯卡拉-理解:如何恢復並繼續如果將來失敗
val l = List(1, 2, 3)
...我需要調用2種方法,每個元素返回Future
和得到以下結果:
Future(Some(1), Some(2), Some(3))
這下面是我的嘗試:
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global
def f1(i: Int) = Future(i)
def f2(i: Int) = Future { if (i % 2 == 0) throw new Exception else i }
val l = List(1, 2, 3)
val results = Future.sequence(l.map { i =
val f = for {
r1 <- f1(i)
r2 <- f2(i) // this throws an exception if i is even
} yield Some(r1)
f.recoverWith {
case e => None
}
})
如果f2
失敗,我想恢復並繼續處理剩餘的元素。上面的代碼不起作用,因爲從不調用recoverWith
,即使f2
失敗。
如何在f2
失敗時恢復,以便最終結果如此?
Future(Some(1), None, Some(3))
第二元件應當是None
因爲f2
失敗當輸入整數爲偶數(即2)。