2016-12-04 68 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