【问题标题】:Using result value of the future使用未来的结果值
【发布时间】:2014-05-28 23:34:52
【问题描述】:

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

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 的future 在val d 表达式时尚未完成,则将其阻塞直到完成,然后在它可用时使用该值?

【问题讨论】:

    标签: scala asynchronous future


    【解决方案1】:

    您可以像这样使用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

    【讨论】:

    • 这似乎不起作用。使用第二种方法,我一直收到TimeoutException: Futures timed out after [0 nanoseconds] 错误。
    • 给它更多的时间来完成,要么是正的有限持续时间,要么是 Duration.Inf 用于无限等待。 0 纳秒意味着无需等待。
    猜你喜欢
    • 2019-09-23
    • 1970-01-01
    • 1970-01-01
    • 2016-03-02
    • 2016-04-02
    • 1970-01-01
    • 2019-03-18
    • 1970-01-01
    相关资源
    最近更新 更多