在 HTTP GET 中等待 Future 完成
Waiting for Future to be Complete in HTTP GET
我正在尝试 return 温度转换作为 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
}
}
如果我 return 只是 i
那么它会显示 Future(<not completed>)
如果我 return 上面代码中的 i.value
它将显示 None
我希望它等待并显示数字值。 IE。 F, 32
只会 return 0
Action.async
需要一个 returns Future[Result]
的函数,但是您在下一行 Future[Future[Result]]
中提供
Future { convert.convertTemperature(convert.qTemperature.front) }
因为 convertTemperature
已经 returns Future
。尝试简化为
def getTemperature = Action.async {
convert
.convertTemperature(convert.qTemperature.front)
.map(i => Ok(s"Got result: $i"))
}
我正在尝试 return 温度转换作为 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
}
}
如果我 return 只是 i
那么它会显示 Future(<not completed>)
如果我 return 上面代码中的 i.value
它将显示 None
我希望它等待并显示数字值。 IE。 F, 32
只会 return 0
Action.async
需要一个 returns Future[Result]
的函数,但是您在下一行 Future[Future[Result]]
中提供
Future { convert.convertTemperature(convert.qTemperature.front) }
因为 convertTemperature
已经 returns Future
。尝试简化为
def getTemperature = Action.async {
convert
.convertTemperature(convert.qTemperature.front)
.map(i => Ok(s"Got result: $i"))
}