Как я могу получить логическое значение из будущего [Настройки] - PullRequest
0 голосов
/ 10 июля 2019

У меня есть Future [ProductSettings], который возвращается из getProductSettingsMethod.Теперь мне нужно значение true или false из поля clearedCanLoad

   def getEmployerProductSettingsQuery(employer: Employer): DBIOAction[ProductSettings, NoStream, Effect.Read] = {
val productSettingsQ = productSettingsQuery.filter(_.employerId === employer.id).result
productSettingsQ.map(_.headOrServerException(s"Could not find ProductSettings for employer ${employer.id}"))
 }

   def getEmployerProductSettings(employer: Employer): Future[ProductSettings] =
db.run(getEmployerProductSettingsQuery(employer))

Я пытался .map, filter, flatMap и т. Д., Но ни один не работает

def cleared (employer : Employer) :Boolean = {
val f : Future[ProductSettings] = 
 getEmployerProductSettings(employer)

  val iscleared: Boolean = f.filter { x =>
    x.clearedCanLoadSpenditCards match {
      case true =>
        true
      case false =>
        false
    }
  }

}

Это не работает, также не работает, фильтр

val f : Future[ProductSettings] = getEmployerProductSettings(employer)

     val iscleared  = f . 
  .filter(_.clearedCanLoadSpenditCards.equals(true)).equals(true)

case class ProductSettings(id: Long,
                       employerId: Long,
                       enableCard: Boolean,
                       enableLt: Boolean,
                       enableLtRefundDays: Boolean,
                       enableLtConversion: Boolean,
                       enableLtOPayment: Boolean,
                       clearedCanLoad: Boolean,
                       clearedAt:Option[LocalDateTime]) {

равно true, должен вернуть логическое значение, но я вернул Future [Boolean].Как я могу извлечь логическое значение

1 Ответ

4 голосов
/ 10 июля 2019

Основная цель Future - выполнить код асинхронно. Блокирование будущего, чтобы получить ценность от этого, разрушает цель этого. Но если вам действительно нужен метод cleared для возврата Boolean, вы можете заблокировать будущее, пока его значение не будет разрешено.

Вы можете достичь этого, используя Await:

import scala.concurrent.duration._

val result: ProductSettings = scala.concurrent.Await.result(f, 1 second)

Это будет ждать разрешения будущего. Если секунда проходит, а f все еще не разрешен, это выдаст TimeoutException .

scala.concurrent.Await # результат

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...