使用未来的结果值

时间:2014-05-28 15:27:56

标签: scala asynchronous future

假设我有这个简单的psedo示例

val a: Future[String] = getValA //Assume asynchronous REST call
val b: String = getValB
val c: String = getValC

val d = a + b + c

//rest of the code

现在这显然不会奏效。我已经研究过使用未来的onComplete回调,但这对我的情况来说也不方便,因为它的返回类型是Unit,并且只要将来可用就会调用它。除了回调之外,还有其他方法可以获得未来的结果值吗?

例如,如果在val a表达式时val d的未来未完成,请将其阻止直到完成,然后在值变为可用时使用该值?

1 个答案:

答案 0 :(得分:3)

您可以像这样使用map将值组合到未来:

val d: Future[String] = a.map { _ + b + c }

或者,如果您绝对必须在那里获得价值,您可以拨打阻止电话:

import scala.concurrent._
import scala.concurrent.duration._

val d: String = Await.result(a, 0 nanos) + b + c

有用的阅读:http://docs.scala-lang.org/overviews/core/futures.html