斯卡拉:“我的朋友。”;必需:scala.concurrent.Future[?]”; 编辑

斯卡拉:“我的朋友。”;必需:scala.concurrent.Future[?]”; 编辑,scala,Scala,仍然没有找到解决方案,所以我最终创建了两个someFuture方法。返回未来的一个&不返回的一个(获取otherFuture编译) 我正试图返回Future[Option[JsObject]],但不断出现以下错误: required: scala.concurrent.Future[?] 我在做什么 def someFuture:Future[Option[JsObject]] = Future { Option(JsObject()) } def otherFuture:

仍然没有找到解决方案,所以我最终创建了两个
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而不出错?

问题是
someFuture.flatMap(\uu.get)
不会编译。您需要提供一个函数,该函数接受
JsObject
并返回
Future[无论什么]
以在
someFuture
上使用
flatMap

你可能想要这样的东西:

def otherFuture: Future[Option[JsObject]] = someFuture.map { opt =>
  Option(JsObject(opt.get))
}
如果您只想调用
,那么实际上没有任何理由使用
选项
。但是,像这样使用
,因此下面可能会更好:

def otherFuture: Future[Option[JsObject]] = someFuture.map(_.map(JsObject(_)))
现在,如果一个非空选项满足了未来,那么该选项的内容将被包装在另一层
JsObject
,这似乎就是您的目标


注意,如果您使用“代码>选项/代码>来表示失败,您可能需要考虑在<代码> > 中建立的故障处理。

在“jsObjt”中,这次获得不同的错误:<代码>重载方法值适用于备选方案:[错误](字段:map [字符串,喷雾.js.jsValu])Spay.jSun.jsObjor。[error](成员:List[(String,spray.json.JsValue)])spray.json.JsObject[error](成员:(String,spray.json.JsValue)*)spray.json.JsObject[error]不能应用于(spray.json.JsValue)
我只是在关注你对
JsObject
的使用,但它不会让一个构造函数接受另一个
JsObject
。你能使用
JsObject(“someKey”->”吗?