Scala Play Action.async无法将Ok解析为mvc.AnyContent

问题描述 投票:1回答:1

以下控制器动作导致错误:

(block: => scala.concurrent.Future[play.api.mvc.SimpleResult])play.api.mvc.Action[play.api.mvc.AnyContent]  cannot be applied to (scala.concurrent.Future[Object])". 

动作中的每个期货都应为Ok(),所以我不明白为什么Scala无法正确解析期货。

def form = Action.async {
  val checkSetup: Future[Response] = EsClient.execute(new IndexExistsQuery("fbl_indices"))
  checkSetup map {
    case result if result.status == 200 => Ok("form")
    case result => {
      val createIndexResult: Future[Response] = EsClient.execute(new FillableSetupQuery())
      createIndexResult map {
        indexCreated => Ok("form").flashing("success" -> "alles tutti")
      } recover {
        case e: Throwable => Ok("form error").flashing("message" -> "error indexerzeugung")
      }
    }
  } recover {
    case e: Throwable => Ok("form error").flashing("message" -> "error index query")
  }
}

完整的错误消息:

overloaded method value async with alternatives: [A](bodyParser: play.api.mvc.BodyParser[A])(block: play.api.mvc.Request[A] => scala.concurrent.Future[play.api.mvc.SimpleResult])play.api.mvc.Action[A] <and>   (block: play.api.mvc.Request[play.api.mvc.AnyContent] => scala.concurrent.Future[play.api.mvc.SimpleResult])play.api.mvc.Action[play.api.mvc.AnyContent] <and>   (block: => scala.concurrent.Future[play.api.mvc.SimpleResult])play.api.mvc.Action[play.api.mvc.AnyContent]  cannot be applied to (scala.concurrent.Future[Object])
scala future playframework-2.2
1个回答
0
投票

我不确定在哪里,但似乎此操作中有一个案例未被我的案例结构覆盖。我对此进行了重构,现在可以正常使用:

def form = Action.async {
  EsClient.execute(new IndexExistsQuery("fbl_indices")) flatMap { 
    index =>  if (index.status == 200) Future.successful(Ok("form"))
    else {
      EsClient.execute(new FillableSetupQuery()) map {
        indexCreated => Ok("form").flashing("success" -> "alles tutti")
      } recover {
        case e: Throwable => Ok("form error").flashing("error" -> "error indexerzeugung")
      }
    }
  } recover {
    case e: Throwable => Ok("form error").flashing("error" -> "error index query")
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.