2016-12-04 62 views
2

同时获得结果组成的将来,我有两个功能如何在斯卡拉

f1() => Future[T] 
f2(t: T) => Future[T1] 

我可以

f1().flatMap(t => f2(t)) 

得到T1但是我想要得到T和T1,例如(T ,T1),我怎么能做到这一点

回答

6

可以f2的结果映射flatMap内:

f1().flatMap(t => f2(t).map((t, _))) 

或者使用-理解:

for { 
    t <- f1() 
    t1 <- f2(t) 
} yield (t, t1) 

或者,您也可以压缩2个期货它返回一个元组:

val a = f1() 
val b = a.flatMap(f2) 
val c = a zip b