编辑
仍然没有找到解决方案,因此我最终创建了两个someFuture
方法。一个返回 future ,一个不返回(使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? 最佳答案
问题是someFuture.flatMap(_.get)
无法编译-您需要提供一个接受JsObject
并返回Future[Whatever]
的函数,以便在flatMap
上使用someFuture
。
您可能想要这样的东西:
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
内置的故障处理。