我正在使用构造函数Future.failed创建一个失败的未来,但失败的未来仍然会抛出异常,我认为它不应该 .
session.loadAll方法会抛出异常 .
我也在使用Play Framework
甚至使用try-catch块
我认为 Future.failed 并没有抛出异常 . 它看起来像是,因为堆栈跟踪是在创建异常的地方生成的 .
Future.failed
因此,如果您使用类似 Await.result 的方法,或者假设未来成功的其他方法,您将看到重新抛出异常,但堆栈跟踪将使其看起来好像是在 Future.failed 中抛出的 .
Await.result
首先,我不太清楚为什么你在这里使用未来,因为它们看起来不像异步调用 .
但是,要回答你的问题,我不完全确定这里发生了什么,但看起来你需要处理异常 . 未来的消费者应该使用 Future.onComplete 和模式匹配失败类型,或者在Throwable类型上使用 Future.onFailure 和模式匹配 .
Future.onComplete
Future.onFailure
Scala关于未来的文档:http://docs.scala-lang.org/overviews/core/futures.html
2 回答
我认为
Future.failed
并没有抛出异常 . 它看起来像是,因为堆栈跟踪是在创建异常的地方生成的 .因此,如果您使用类似
Await.result
的方法,或者假设未来成功的其他方法,您将看到重新抛出异常,但堆栈跟踪将使其看起来好像是在Future.failed
中抛出的 .首先,我不太清楚为什么你在这里使用未来,因为它们看起来不像异步调用 .
但是,要回答你的问题,我不完全确定这里发生了什么,但看起来你需要处理异常 . 未来的消费者应该使用
Future.onComplete
和模式匹配失败类型,或者在Throwable类型上使用Future.onFailure
和模式匹配 .Scala关于未来的文档:http://docs.scala-lang.org/overviews/core/futures.html