我是 Java 的 Scala 新手,所以函数式编程对我来说仍然有点难以理解。我在 Play 框架中有一个项目。我需要查询数据库以获取带有 id 的行并将它们显示在 html 模板中。
这是我的代码
def search(query: String) = Action.async{ request =>
val result = SearchEngine.searchResult(query)
val docs = result.map(DocumentService.getDocumentByID(_).map(doc => doc))
val futures = Future.sequence(docs)
futures.map{documents =>
Ok(views.html.results(documents.flatten))
}
}
getDocumentByID
返回一个Future[Options[Document]]
对象,但是我的results
模板需要Array[Document]
,所以我试图将其转换Future[Options[Document]]
为Array[Document]
我拥有的当前代码是最接近的,但它仍然无法编译。这是错误:
Error:(36, -1) Play 2 Compiler:
found : Array[scala.concurrent.Future[Option[models.Document]]]
required: M[scala.concurrent.Future[A]]