2016-02-27 42 views
3

我不明白为什么Scala的Future比Twitters更难使用并且功能更少,而第一个是在第二个之后创建的。因此,这里有大约scala.concurrent.Future问题:Scala未来设计问题

  • 为什么Future.onComplete回报Unit代替Future?可组合的方法更方便。
  • 为什么Scala的Future不支持取消?

回答

6

Future.onComplete返回一个单位,所以调用不能被链接。根据Scala文档,“请注意,此设计是有意的,以避免暗示链式调用可能意味着执行已注册回调的顺序(在相同的未来注册的回调无序)”。

为了构建未来,请使用组合器,如flatMap,andThenfilter,它们都返回Future。

退房http://docs.scala-lang.org/overviews/core/futures.html#functional-composition-and-for-comprehensions更多细节

我认为取消是相当细致入微。有关更多详细信息,请参阅此讨论:How to cancel Future in Scala?

+1

地图是转换,我不希望进行转换。我想在返回的Future Future上添加'onSuccess'和'onFailure'处理程序 –

+2

对不起,好点 - 我误解了。我相应地更新了我的答案。听起来像scala不希望'onComplete','onSuccess'和'onFailure'方法是可链接的,因为这可能意味着所有链接回调的顺序。听起来像一个合理的权衡 –

+0

http://stackoverflow.com/questions/32987855/what-are-advantages-of-a-twitter-future-over-a-scala-future有关于两者之间的差异更多的信息。 – Shastick