與另一個未來的理解我有這樣的代碼:斯卡拉未來產量
def getFutureResult() : Future[Long] = {
val f1 = service.getFutureR1()
val f2 = service.getFutureR2()
val f3 = service.getFutureR3()
for {
r1 <- f1
r2 <- f2
r3 <- f3
} yield {
if (combine(r1,r2,r3))
service.getFutureR100()
else
service.getFutureR200()
}
}
每個服務方法返回一個Future [龍]。 當然,for語句返回Future [Future [Long]],代碼不能正確編譯。 我有兩個解決方案,這是第一個:
def getFutureResult() : Future[Long] = {
val f1 = service.getFutureR1()
val f2 = service.getFutureR2()
val f3 = service.getFutureR3()
val ffresult = for {
r1 <- f1
r2 <- f2
r3 <- f3
} yield {
if (combine(r1,r2,r3))
service.getFutureR100()
else
service.getFutureR200()
}
ffresult.flatMap(identity)
}
這是第二個:
def getFutureResult() : Future[Long] = {
val f1 = service.getFutureR1()
val f2 = service.getFutureR2()
val f3 = service.getFutureR3()
val ffresult = for {
r1 <- f1
r2 <- f2
r3 <- f3
} yield {
val fresult = if (combine(r1,r2,r3))
service.getFutureR100()
else
service.getFutureR200()
}
Await.result(fresult,10 seconds)
}
什麼是最好的解決辦法嗎?還有其他解決方案嗎?
預先感謝您!
非常感謝您,我將使用此解決方案。 其他問題:我的第二個解決方案(使用await)阻塞?或者它不會因爲等待在另一個未來而被阻止。 – jfabaf 2015-03-25 12:50:30
@jfabaf直到'f1','f2'和'f3'準備就緒,但不會阻塞'service.getFutureR100()'或'service.getFutureR200()' – Kolmar 2015-03-25 13:22:16