logger.error( "string" ,e) 在使用 future 和异步时无法在 scala-play 中工作



我收到错误对于记录器.error("字符串",e)

类型单位的表达式不符合预期类型_U

代码低于

object DataFormatController extends Controller {
  val logger: Logger = Logger("Data Format Controller")
  val dataFormatDao = new DataFormatDao(Global.cassandraSession, Global.getKeyspace)
  def listFormats(companyId: Option[String], userId: Option[String]) = Action.async(parse.anyContent){
    import play.api.libs.concurrent.Execution.Implicits.defaultContext
     implicit request =>
       val json = Json.obj("company_id" -> companyId, "user_id" -> userId)
       val reqResult = json.validate[ListDataFormatRequest](listFormatReads)

  reqResult match {
    case s: JsSuccess[ListDataFormatRequest] =>
      val formatsFuture = dataFormatDao.findAllAsync(s.get.companyId).map(f => {
          val res = f.map(x => {
            new ListDataFormat(x.format, x.id)
          })
        Ok(Json.obj("status" -> 1, "data" -> Json.toJson(res)))
      })
      formatsFuture.recover {
        case e: Throwable => {
          BadRequest(Json.toJson(Response(0, errorMessage = Some(e.getMessage))))
          logger.error("asd",e)
        }
      }
    case e: JsError => Future(BadRequest(Json.toJson(
      Response(0, errorMessage = Some(Utils.convertToReadableMessage(e))))))
  }
}
}

我想记录这个错误!

在future上使用recover时,需要返回与原始future相同(ish)类型的值。

  formatsFuture.recover {
    case e: Throwable => {
      BadRequest(Json.toJson(Response(0, errorMessage = Some(e.getMessage))))
      logger.error("asd",e)
    }
  }

块中的最后一个值是返回值。由于这是对logger.error的调用,编译器认为您返回的值是Unit,这不满足recover的要求。

应切换订单,以便返回BadRequest

  formatsFuture.recover {
    case e: Throwable => {
      logger.error("asd",e)
      BadRequest(Json.toJson(Response(0, errorMessage = Some(e.getMessage))))          
    }
  }

最新更新