我正在尝试将温度转换作为HTTP GET请求返回并显示。目前,我不认为它在等待未来的完成。如果我尝试添加onComplete回调,则它将无法编译,并会抱怨异步已过载。
def getTemperature = Action.async {
val futureTemp = scala.concurrent.Future { convert.convertTemperature(convert.qTemperature.front) }
futureTemp.map(i => Ok("Got result: " + i.value))
}
def convertTemperature(cTemp:Temperature) : Future[Double] = Future {
//If typeOfTemp is F convert it to C and vise versa
val typeOfTemp = cTemp.typeOfTemp
val tempVal = cTemp.tempVal
typeOfTemp match {
case "F" => (tempVal - 32) * 5 / 9
case "C" => (tempVal / 5) + 32
}
}
如果我只返回i
,它将显示Future(<not completed>)
如果我像上面的代码一样返回i.value
,它将显示None
我希望它等待并显示数字值。即F, 32
只会返回0
答案 0 :(得分:1)
Action.async
需要一个返回Future[Result]
的函数,但是您在下一行中提供了Future[Future[Result]]
Future { convert.convertTemperature(convert.qTemperature.front) }
因为convertTemperature
已返回Future
。尝试简化为
def getTemperature = Action.async {
convert
.convertTemperature(convert.qTemperature.front)
.map(i => Ok(s"Got result: $i"))
}