2016-01-21 61 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?