2015-07-12 29 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)',尽管这只是个人喜好的问题。 –