Scala:“必需:scala.concurrent.Future [?]”

时间:2014-06-08 11:51:31

标签: scala

修改

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

1 个答案:

答案 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内置的失败处理。