2015-07-12 28 views
3

這是一個後續行動,我以前question譜寫未來嘗試

假設我有一個函數,該函數返回一個Future[String]和功能String => Try[Int]

val slowAsync : Int => Future[String] = ... 
val mayFail : String => Try[Int] = ... 

假設我將它們組合到使一個新的功能Int => Future[Int]

val composed : Int => Future[Int] = {x => 
    for (str <- slowAsync(x); y <- Future(mayFail(s).get)) yield y 
} 

composed可能是工作,但我不喜歡這Future(mayFail(s).get)。你將如何解決它?

回答

5

您可以使用fromTry:

val x = slowAsync(1) flatMap (s => Future.fromTry(mayFail(s))) 
+2

不錯,我完全忘了該方法。另外,如果'mayFail'是一個函數,你可以通過無縫的風格進一步簡化'flatMap'主體到'flatMap(mayFail和Then Future.fromTry)',儘管這只是個人喜好的問題。 –