Scala. Как я могу получить значение из Future в случае успеха, в случае исключения броска неудачи? - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть код (функция getServiceBySid возвращает Future[ServiceCategory]):

var service: ServiceCategory =
      Await.result((for {
        optService <- getServiceBySid(serviceSid)
      } yield {
        optService
      }) recover {
        case e: Throwable =>
          throw e
      }, Duration(10, TimeUnit.SECONDS))

, и я не могу перестать думать, что этот код не в истинном стиле Scala. На самом деле он делает что-то вроде

val serviceCategory: ServiceCategory = 
      getServiceCategoryBySid(serviceCategorySid) onComplete {
        case Success(value) => value
        case Failure(e) => throw e
      }

, но onComplete возвращает Unit, поэтому он не работает. Как я могу изменить код?

1 Ответ

2 голосов
/ 10 апреля 2020

Вы можете просто написать

Await.result(getServiceBySid(serviceSid), Duration(10, TimeUnit.SECONDS))

, потому что если вы Await.result на Future, он вернет значение в случае успеха или выдаст исключение, пойманное при сбое Future.

...