Я новичок в Scala с Java, поэтому для меня все еще сложно понять функциональное программирование. У меня есть проект в Play Framework. Мне нужно запросить базу данных, чтобы получить строки с идентификаторами и отобразить их в html-шаблоне.Получить будущие объекты из будущих опций в Scala
Вот мой код
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]]
Я только что сделал это, но есть ошибка в 'Ok (views.html.results (documents.flatten))' line. Он говорит: 'тип несоответствия, ожидаемый: массив [Document], фактический: Array [Nothing]' – Ken
@Ken remove 'flatten' – pamu
Когда я его удаляю, все еще есть ошибка:' Тип несоответствия, ожидаемый: Array [Document], actual : mutable.ArrayOps [Document] ' – Ken