我一直在看这个如何将 Scala Futures 与 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
}