Scala Future oncomplete还没有完成?

时间:2017-10-05 19:20:55

标签: scala

我试图了解scala期货中的高阶函数。我写了这段代码

import scala.concurrent.Future
import scala.util.{Failure, Success}
import scala.concurrent.ExecutionContext.Implicits.global


object App30 extends App {

  def getMilk(): String = {
    val ans = "5 gallons of milk"
    ans
  }
  def getFlour(): String =
  {
    val ans= "2 oz of flour"
    ans
  }

  val milkFuture = Future { getMilk() }
  val flourFuture = Future { getFlour() }

  val resultFut = {
    for {
      milk <- milkFuture
      flour <- flourFuture
      result = milk + flour
    } yield result
  }

  resultFut.onComplete{

    case Success(answer) => println("The result of getting ingridents is " + answer)
    case Failure(exception) =>  println("could not access future value")
  }
}

我的问题是我无法获得所需的字符串&#39;得到的结果......&#39; 。我看到调试器因onComplete而停止,并且没有进入成功的情况。

我可以知道我哪里出错吗?如果这是一个愚蠢的错误,请指出它,然后我将删除这个问题。另外,提供一个关于什么概念不对的解释,因为这将有助于新人。

谢谢

1 个答案:

答案 0 :(得分:2)

您必须明确阻止将来,否则主线程可能会在完成之前终止:

import scala.concurrent.{Await, Future}
import scala.concurrent.duration._

Await.result(resultFut, 5 seconds)

请注意,此类方法绝对不能与生产代码一起使用,它仅用于测试Future的输出。通常,你会在未来有机会完成的背景中无休止地运行一些事件循环,除非发生不好的事情。