[编辑]
被问到时我是新手.这就是答案:
Future.fromTry(Try( 1/0 ))
Run Code Online (Sandbox Code Playgroud)
其他值得了解的事情(可能会错过 - 在检查时引导我):
Future.successful( 1/0 )
Run Code Online (Sandbox Code Playgroud)
会抛出一次.Future.successful和Future.failure不仅是创建Future的便捷方式,它们还跳过执行上下文循环并按顺序进行求值.
[原始问题]
我有一个Try
抛出异常.我想要Try
成为一个Future
我能够做到的recoverWith
.
如果你不知道,请不要猜.
问题是,如何Try
在Future
不处理任何异常的情况下转换为Try
(仅在未来的恢复中)?
请注意,需要Await来测试您未来的结果
代码示例演示了我的想法,但是一旦达到它就会抛出(new RuntimeException("-------failed-------")
就是我得到的)
val t = Try(throw new RuntimeException("my"))
val resF : Future[String] = if (t.isSuccess)
Future.successful(t.get)
else
Future.failed(new RuntimeException("-------failed-------"))
val resFWithRecover = resF.recoverWith{
case NonFatal(e) =>
Future.successful("recoveredWith")
}
Await.result(resFWithRecover, Duration("5s"))
Run Code Online (Sandbox Code Playgroud)
Mic*_*jac 19
...如何
Try
在Future
不处理任何异常的情况下转换为Try
?
使用Future.fromTry
.
scala> val t = Try(throw new RuntimeException("my"))
t: scala.util.Try[Nothing] = Failure(java.lang.RuntimeException: my)
scala> val resF = Future.fromTry(t)
resF: scala.concurrent.Future[Nothing] = scala.concurrent.impl.Promise$KeptPromise@57cf54e1
scala> resF.recoverWith{
| case NonFatal(e) =>
| Future.successful("recoveredWith")
| }
res5: scala.concurrent.Future[String] = scala.concurrent.impl.Promise$DefaultPromise@1b75c2e3
Run Code Online (Sandbox Code Playgroud)