【发布时间】:2015-03-25 17:02:37
【问题描述】:
我有这个代码:
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[Long]。 当然,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)
}
什么是最好的解决方案?还有其他解决办法吗?
提前谢谢你!!
【问题讨论】: