仍然没有找到解决方案,所以我最终创建了两个someFuture
方法。一个回归未来的人一个没有(让otherFuture
编译)
我试图返回Future[Option[JsObject]]
,但一直收到此错误:
required: scala.concurrent.Future[?]
我在做什么
def someFuture:Future[Option[JsObject]] =
Future {
Option(JsObject())
}
def otherFuture:Future[Option[JsObject]] =
Future {
Option(JsObject(
someFuture.flatMap(_.get)
))
}
// get error here
found : JsObject
[error] required: scala.concurrent.Future[?]
如何在不收到错误的情况下返回JsObject?
答案 0 :(得分:4)
问题是someFuture.flatMap(_.get)
无法编译 - 您需要提供一个函数,该函数需要JsObject
并返回Future[Whatever]
才能在flatMap
上使用someFuture
{1}}。
你可能想要这样的东西:
def otherFuture: Future[Option[JsObject]] = someFuture.map { opt =>
Option(JsObject(opt.get))
}
如果您只是这样打电话给Option
就没有任何理由使用.get
,所以以下情况可能更好:
def otherFuture: Future[Option[JsObject]] = someFuture.map(_.map(JsObject(_)))
现在,如果非空选项满足未来,则该选项的内容将包含在JsObject
的另一层中,这似乎是您的目标?
请注意,如果您使用Option
来表示失败,则可能需要考虑Future
内置的失败处理。