【问题标题】:Waiting for Future to be Complete in HTTP GET在 HTTP GET 中等待 Future 完成
【发布时间】:2020-01-14 18:03:22
【问题描述】:

我正在尝试将温度转换作为 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 我希望它等待并显示数值。 IE。 F, 32 只会返回 0

【问题讨论】:

    标签: scala playframework future


    【解决方案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"))
    }
    

    【讨论】:

      猜你喜欢
      • 2019-03-02
      • 2021-07-30
      • 2018-09-22
      • 1970-01-01
      • 1970-01-01
      • 2017-09-30
      • 1970-01-01
      • 1970-01-01
      • 2020-03-04
      相关资源
      最近更新 更多