Если вы ДОЛЖНЫ возвращать маршрут вместо Future [Route], вы можете попробовать использовать
Await.result(validate(), Duration(2, TimeUnit.SECONDS)) //substitute your choice of duration
, это будет блокировать до подтверждения возврата.
Таким образом, полное решение будет выглядеть так:
// validateRoute act like a directive which validate a route before proceeding further
override def validateRoute(route: Route)(implicit ec: ExecutionContext): Route = {
extractRequest { request =>
decodeRequest {
entity(as[String]) { content =>
(headerValueByName("header1") & headerValueByName("header2")) {
case (header1, header2) => {
// dom some
// validate() returns a Future[Either[Error, Boolean]]
Await.result(validate(),Duration(2, TimeUnit.SECONDS) ) match
{
case Right(_) => route
case Left(ex) => complete(StatusCodes.Unauthorized -> ex.getMessage)
}
}
}
}
}
}
}