【问题标题】:In Scala futures, should I make my functions return a Future or return a Try?在 Scala 期货中,我应该让我的函数返回 Future 还是返回 Try?
【发布时间】:2014-07-03 10:20:43
【问题描述】:

当我使用 Scala 期货时,我对应该返回未来还是返回 Try 感到困惑。由于我的代码可能会失败,所以我希望返回一个可能成功或失败的 Try,并且该函数的用户可以使用该函数来创建未来。

【问题讨论】:

    标签: scala


    【解决方案1】:

    Futures 可能会失败,是的,但是这种失败是自包含的——它不会传播到您的代码的其余部分。 Future 在这个意义上与Try 非常相似,实际上它所持有的值是Option[Try[T]]

    所以当你 mapFuture 时,你只会处理 Success 的情况,它是 value,如果你想处理失败,你可以使用 recoverrecoverTo .

    Future回调函数也直接处理Try

     Future(...).onComplete {
         case Success(value) => ...
         case Failure(throwable) =>
     }
    

    当您需要异步结果时,请坚持使用Future,因为无论如何它在内部使用Try

    【讨论】:

    • 所以总是返回 def something() = future { },因为它里面有 Try。
    【解决方案2】:

    如果您想异步获取结果,您应该使用FutureFuture 有 2 种类型的结果:SuccessFailure,正如您所知,它们是 Try 的后代,所以无论如何,如果发生故障,您会发现它。

    【讨论】:

    • “你知道是 Try 的后代”:错误,什么?
    • 查看 LimbSoup 的答案
    • 算了,我不知何故以为你在说FutureTry 的“后代”。我可能需要再睡一会儿。
    【解决方案3】:

    假设我正在设计另一个演员 API。我应该使用什么发送结果类型?如果我希望我的代码的客户尽可能地返回它的业务(换句话说,即发即弃类型的发送)并在将来的某个地方处理响应,我会选择Future。如果我想阻止直到回复回复,我会选择Try

    希望,这会让你明白一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-03
      • 1970-01-01
      • 2014-08-31
      • 1970-01-01
      • 1970-01-01
      • 2012-10-27
      • 2019-10-01
      相关资源
      最近更新 更多