Scala Future.failed抛出传递给它的异常

时间:2016-04-01 16:28:13

标签: scala exception-handling future throws

我正在使用构造函数Future.failed创建一个失败的未来,但失败的未来仍然会在我认为不应该抛出异常。

session.loadAll方法会抛出异常。

我也在使用Play Framework

Future.failed throws an exception image

甚至使用try-catch块 enter image description here

2 个答案:

答案 0 :(得分:2)

我认为Future.failed没有抛出异常。看起来是这样,因为堆栈跟踪是在创建异常的地方生成的。

因此,如果您使用类似Await.result的方法或其他假设未来成功的方法,您将看到重新抛出异常,但堆栈跟踪将使其看起来好像它是在Future.failed抛出的。

答案 1 :(得分:1)

首先,我不太清楚为什么你在这里使用未来,因为它们看起来不像异步调用。

然而,为了回答你的问题,我不完全确定这里发生了什么,但看起来你需要处理异常。未来的消费者应使用Future.onComplete和模式匹配失败类型,或Future.onFailure和模式匹配Throwable类型。

Scala关于未来的文档:http://docs.scala-lang.org/overviews/core/futures.html