2016-02-27 74 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