类型不匹配。必需:布尔值,发现:scala 中的 Future[Boolean]

Type mismatch. Required: Boolean, found: Future[Boolean] in scala

大家好,我是 Scala 的新手。我的代码中有一个 if/else 条件,它将通过布尔变量(未来)检查某些内容,但它说“类型不匹配。必需:布尔值,找到:Future [Boolean]”。我怎样才能让它发挥作用?

    autoCondition      = configRepository.getAutoCondition //Future[Boolean] variable.
.
. //some other stuff here
.
yield if (autoCondition) page else autoPage

autoCondition 是一个 Future[Boolean]。使用这种值的通常方法是映射它。

autoCondition.map(if (_) page else autoPage)
// short for:
autoCondition.map(x => if (x) page else autoPage)

但是你问题中的代码并不完整。您似乎已经在进行理解工作。如果那个 for-comprehension 结束了 Future,你可能只需要像这样更改你的代码

for {
  // other stuff ...
  autoCondition <- configRepository.getAutoCondition
  // other stuff ...
} yield if (autoCondition) page else autoPage

如果您在 for-comprehension 中使用 <-,该代码将被翻译成一系列 mapflatMap 调用。

看起来你正在使用 scala future(也许你正在连接到数据库或类似的东西 你可以做两件事中的一件

1:映射未来。这意味着您的代码看起来像这样

configRepository.getAutoCondition.map{
condition =>
if(condition) page else autoPage
}

注意:这也会 return 任何数据类型的未来 page/autoPage returns

2:您可以使用 Await。这将等待 x 时间间隔的结果,并且 return 你会得到布尔值。你的代码看起来像这样

import scala.concurrent._
import scala.concurrent.duration._
val conditionVariable=Await.result(configRepository.getAutoCondition, 100 nanos)
if(conditionVariable) page else autoPage

其中第二个变量是您要等待的时间

Ps:第二种方法将使您的函数调用同步。所以技术上不推荐。但是,查看您的代码似乎是在进行页面调用。明智地使用这两个中的一个