0
我有2 Future
s的Try
我只想做一些事情,只要他們都成功完成。 Future
都是獨立的。所以這裏是一些代碼成功的Tuple2上的模式匹配
def a1: Future[Try[String]] = Future { Success("a1") }
def a2: Future[Try[Int]] = Future { Success(2) }
val r1 = for {
c1 <- a1
c2 <- a2
} yield (c1, c2)
r1.map {
case tpl: (Success[String], Success[Int]) =>
println("success")
case _ =>
println("failure")
}
這打印success
。 這個問題是因爲我在Tuple2
上的模式匹配,因爲即使第二個元素是Failure
,第一個case
被執行也會被刪除。所以,如果我改變a2
到
def a2: Future[Try[Int]] = Future { Failure(new InternalError("error")) }
,然後現在,即使a2
返回Failure
上面的代碼仍然打印success
再次執行該
val r1 = for {
c1 <- a1
c2 <- a2
} yield (c1, c2)
r1.map {
case tpl: (Success[String], Success[Int]) =>
println("success")
case _ =>
println("failure")
}
。我該如何解決?一個非常漂亮的解決方案是使用isInstanceOf[Success[String]]
和isInstanceOf[Success[Int]]
檢查元組的元素,並根據它們的真值進行操作,但有沒有更好的方法?
謝謝。那太簡單了,太沒想到了。對不起,打擾了。 – lovesh