在Scala中回归非未来

时间:2016-11-23 20:20:01

标签: scala asynchronous playframework future playframework-2.5

我有以下方法在Play for Scala应用程序中返回字符串列表:

def example = Action.async { request =>

  val access = getAccess()

  if (access > 0) {
          val future = MyObject.intensiveMethod
          future.map {
              result => {
                  val list = result.asInstanceOf[List[String]]
                  val json = JsObject(Seq(
                      "list" -> Json.toJson(list)
                  ))
                  Ok(json)
              }
          }
  }
  else {
      val json = JsObject(Seq(
          "msg" -> JsString("error!")
      ))
      Ok(json)
  }

}

代码无法编译时出现以下错误,因为如果access = 0,则结​​果不是Future:

  

类型不匹配;发现:play.api.mvc.Result required:   scala.concurrent.Future [play.api.mvc.Result]

如何解决这个问题?

1 个答案:

答案 0 :(得分:5)

然后用Future包装它,例如:

  Future.successful(Ok(JsObject(Seq(
      "msg" -> JsString("error!")
  ))))