2015-06-22 39 views
0

鑑於期貨fa, fb, fc屈服,我可以用f: Function1[(A,B,C), Future[D]],返回一個Future[D]或者通過:未來flatMap

(for { 
    a <- fa 
    b <- fb 
    c <- fc 
} yield (a,b,c)).flatMap(f) 

具有聲明變量a,b,c兩次不值得羨慕的財產。

a.zip(b).zip(c).flatMap{ case (a, (b, c)) => f(a, b, c) } 

這是更簡潔,但期貨的嵌套成對成對的是怪異。

如果產量返回平坦的結果,那麼使用for-expression的形式將會很棒。有這樣的事嗎?

+0

下面是一個類似的問題試圖用無形體做到這一點:https://stackoverflow.com/questions/23453570/using-shapeless-to-convert-tuple-of-future-to-future-of-tuple-by- hlist的方式 –

回答

4

yield中沒有理由flatMap。它應該是理解中的另一條線。

for { 
    a <- fa 
    b <- fb 
    c <- fc 
    d <- f(a, b, c) 
} yield d 

我不認爲它可以得到比這更簡潔。

+0

哦,我的......我怎麼錯過了。對不起,未來的自我。 – Synesso