以下控制器操作会导致错误:
(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")
}
}
完成Errormsg:
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])
答案 0 :(得分: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")
}
}