Scala - 如何从平面地图 return 简单的原始类型值?

Scala - How to return simple raw type value from flat map?

我有一个简单的代码,我只想获得一个 boolean 值,但它包含在 Future 对象中:

def getValue(arg: String) : Boolean = for {
    data <- SomeObject.getData(arg) //SomeObject is in class constructor 
    value = data.getBooleanValue
} yield value

这里的问题是我需要 return Future[Boolean] 而不是简单的 boolean。如何将其更改为 return 仅原始类型?

只要你调用一个 API 那个 return s Future 你需要链接你的代码以在 Future 完成时尽可能地执行.尽可能避免等待 Future 完成。

所以把方法改成return Future:

def getValue(arg: String): Future[Boolean] =
  SomeObject.getData(arg).map(_.getBooleanValue)

然后而不是调用

nextMethod(getValue(myArg))

像这样在 Future 上使用 map

getValue(myArg).map{ bool =>
  nextMethod(bool) // next processing step
}

这将给出一个新的 Future,其中将包含下一步处理的结果。

虽然这确实需要重新编写调用代码,但 Scala 使此类代码非常容易编写。继续将操作链接到前一个 Future,直到处理完成。

在大多数情况下,代码将以发送消息或写入文件等副作用操作结束,在这种情况下,无需等待 Future 完成。

在极少数情况下,当您确实需要等待 Future 时,请使用 Await.result 恢复 Futures

链的最终结果