在 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"))
}