等待将来在HTTP GET中完成

时间:2019-09-12 20:07:15

标签: scala playframework future

我正在尝试将温度转换作为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

1 个答案:

答案 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"))
}