我试图了解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而停止,并且没有进入成功的情况。
我可以知道我哪里出错吗?如果这是一个愚蠢的错误,请指出它,然后我将删除这个问题。另外,提供一个关于什么概念不对的解释,因为这将有助于新人。
谢谢
答案 0 :(得分:2)
您必须明确阻止将来,否则主线程可能会在完成之前终止:
import scala.concurrent.{Await, Future}
import scala.concurrent.duration._
Await.result(resultFut, 5 seconds)
请注意,此类方法绝对不能与生产代码一起使用,它仅用于测试Future
的输出。通常,你会在未来有机会完成的背景中无休止地运行一些事件循环,除非发生不好的事情。