当我使用Scala期货时,我对是否应该返回未来或返回Try感到困惑。由于我的代码可能会失败,所以我希望返回一个可能成功或失败的Try,并且该函数的用户可以使用该函数来创建未来。
答案 0 :(得分:4)
Future
可能会失败,是的,但失败是自包含的 - 它不会传播到你的其余代码。在这个意义上,Future
与Try
非常相似,实际上它所拥有的值是Option[Try[T]]
。
因此,当您map
Future
时,您只会处理Success
value
recover
的情况,如果您愿意处理失败,您可以使用recoverTo
或Future
。
Try
回调函数也直接处理 Future(...).onComplete {
case Success(value) => ...
case Failure(throwable) =>
}
:
Future
当您需要异步结果时,请坚持Try
,因为它内部使用{{1}}。
答案 1 :(得分:0)
如果您想异步获取结果,请使用Future
。 Future
有两种类型的结果:Success
和Failure
正如您所知,它们是Try的后代,所以无论如何,如果它发生,您将会捕获failre。
答案 2 :(得分:0)
假设我正在设计另一个演员API。我应该将什么用于发送的结果类型?如果我希望我的代码的客户尽可能地返回它的业务(换句话说,发送方式为“即发即弃”)并在将来的某个地方处理响应,我会选择Future
。如果我想阻止响应将返回,我将选择Try
。
希望,这对你来说有点清楚。