我需要从Calculation.scala访问此数据mapData。我在Final.scala中调用函数的方式如下所示。
当我看到FETCH_DATA()的输出或打印它时,我会看到Future(<未完成>),而Result是空的。我不知道如何等到下载完所有数据后再访问mapData?我可以知道怎么做吗?我是Scala的新手。在C++中,我知道回调,在那里处理起来很容易。但在Scala中,我使用了Future、AWait或OnComplete,但不清楚如何做到这一点。
Final.Scala
object finalComputation {
val calculationInfo = new Calculaton()
calclulationInfo.fetch_data()
val result = calculationInfo.getMapData()
def main(args: Array[String]): Unit = {
........
}
}
Calculation.scala
class Calculation {
var mapData = Map.empty[String, String]
def createMapData(metricItem: ActualMetrics) = {
mapData += (metricItem._1 -> metricItem._2)
}
def getMapData() = {
mapData
}
def fetch_data() = {
val totalData: Future[Done] =
querApi
.getData()
.map { data =>
(data)
}
}
}
Await.result(totalData, Duration.Inf).runForeach(unit => {
createMapData(parse.From(totalData))
})
}
}
1条答案
按热度按时间lx0bsm1f1#
首先,不要把并发性和可变性混为一谈。
其次,不要创建需要特定调用顺序的命令式API。
第三,
Future
只是回调的花哨 Package 器。第四,不要在
main
之前启动计算我不得不假设一些类型,但我希望这能给你一个大体的想法。
我的建议是,选择任何Scala课程/书籍/教程,并适当地学习这门语言。