假设我有这个简单的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
的未来未完成,请将其阻止直到完成,然后在值变为可用时使用该值?
答案 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