2016-01-21 60 views
0

這裏是從官方文檔的例子:使用completeWith的承諾

val f = Future { 1 } 
val p = Promise[Int] 
p completeWith f 
p.future onSuccess { 
    case x => println(x) 
} 

似乎太多了儀式,因爲這個想法可以更簡潔地表示:

f onSuccess { 
    case x: Int => println(x) 
} 

如何completeWith在現實世界中有用嗎?

回答

2

Promises通常被用來爲Future創建更復雜的組合程序和方法,你可以看到它被廣泛實施的Future

https://github.com/scala/scala/blob/v2.11.7/src/library/scala/concurrent/Future.scala#L1

使用,這是很少在常規代碼使用,除非你想擴展Future的功能或創建您自己的異步api。

Coursera https://www.coursera.org/course/reactive有一個有趣的課程,涵蓋Futures。在您應該執行的任務中,使用FuturePromises的許多不同方法對於執行此操作非常有用,甚至是必需的。

+0

pluz one for FRP course –

1

A Promise是一次寫入值,由先寫入的人完成。在某些情況下,當多個Future競爭完成它時很有用。在你的例子中,它顯然不是很有用,但情況並非總是如此。

編輯:在這裏找到更長的解釋:What are the use cases of scala.concurrent.Promise?