我有这段代码:
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)
}
什么是最佳解决方案?还有其他解决方案吗?
提前谢谢!!
答案 0 :(得分:5)
只需再添加一个舞台:
for {
r1 <- f1
r2 <- f2
r3 <- f3
result <- (
if (combine(r1,r2,r3)) service.getFutureR100()
else service.getFutureR200())
} yield result
答案 1 :(得分:0)
为什么不在for-comprehension中rs
。
val ffresult = for {
r1 <- service.getFutureR1()
r2 <- service.getFutureR2()
r3 <- service.getFutureR3()
rs <- if (combine(r1,r2,r3))
service.getFutureR100()
else
service.getFutureR200()
} yield rs