撰写未来并尝试

Mic*_*ael 3 scala exception-handling future

这是我上一个问题的后续行动

假设我有一个函数,它返回Future[String]一个函数和一个函数String => Try[Int]:

val slowAsync : Int => Future[String] = ...
val mayFail   : String => Try[Int] = ...
Run Code Online (Sandbox Code Playgroud)

假设我正在编写它们以创建一个新函数Int => Future[Int]:

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

composed可能是工作,但我不喜欢这样Future(mayFail(s).get).你会怎么解决它?

sea*_*mcl 5

你可以使用fromTry:

val x = slowAsync(1) flatMap (s => Future.fromTry(mayFail(s)))
Run Code Online (Sandbox Code Playgroud)

  • 很好,我完全忘记了这种方法.另外如果`mayFail`是一个函数,你可以通过无点样式进一步简化`flatMap`体到`flatMap(mayFail andThen Future.fromTry)`,尽管这只是个人偏好的问题. (2认同)