斯卡拉:“我的朋友。”;必需: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”->”吗?
?