编辑
仍然没有找到解决方案,因此我最终创建了两个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内置的故障处理。

10-08 16:36