【发布时间】:2014-10-14 06:00:44
【问题描述】:
我一直在看这个How are Scala Futures chained together with flatMap? 和相应的文章以及翻译理解。我正在慢慢地向我的理解中添加一些东西,并且因为我猜我认为会翻译成的代码不正确而被卡住了。
在这里,我有一个 runProgram 和 runProgram2,我认为它们是等效的,而不是因为 runProgram2 无法编译。有人可以解释一下这个等价的理解吗...
注意:是的,我知道 future.flatMap 通常用于折叠 Future[Future[String]] 但这是我文件的精简版本(也许我修剪得太远了)。
def main(args: Array[String]) = {
val future1: Future[String] = runMyProgram()
//val future2: Future[String] = runMyProgram2()
}
def runMyProgram() : Future[String] = {
val future = serviceCall()
future.flatMap(processAllReturnCodes)
}
// def runMyProgram2() : Future[String] = {
// val future = serviceCall()
// for {
// result <- future
// } yield processAllReturnCodes(result)
// }
def processAllReturnCodes(count: Int) : Future[String] = {
val promise = Promise.successful("done")
promise.future
}
def serviceCall() : Future[Int] = {
val promise = Promise.successful(5)
promise.future
}
def serviceCall2() : Future[String] = {
val promise = Promise.successful("hithere")
promise.future
}
【问题讨论】: