Ich bin neu in Scala von Java, so dass die funktionale Programmierung Sache ist immer noch ein bisschen schwierig für mich zu verstehen. Ich habe ein Projekt im Play-Framework. Ich muss die Datenbank abfragen, um Reihen mit Ids zu erhalten und sie in einer HTML-Schablone anzuzeigen.Get Future Objekte aus Zukunft Optionen in Scala
Hier ist mein Code
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
kehrt ein Future[Options[Document]]
Objekt, aber meine results
Vorlage nimmt Array[Document]
so habe ich ohne Erfolg versucht, die Future[Options[Document]]
zu Array[Document]
Der aktuelle Code I haben zu verwandeln das Nächste, das ich gewesen bin, aber es kompiliert immer noch nicht. Dies ist der Fehler:
Error:(36, -1) Play 2 Compiler:
found : Array[scala.concurrent.Future[Option[models.Document]]]
required: M[scala.concurrent.Future[A]]
Ich habe gerade das getan, aber es gibt einen Fehler in 'Ok (views.html.results (documents.flatten))' Zeile. Es heißt: 'type mismatch, erwartet: Array [Dokument], tatsächlich: Array [Nichts]' – Ken
@Ken remove 'flatten' – pamu
Wenn ich es entferne gibt es immer noch Fehler:' Typ nicht übereinstimmen, erwartet: Array [Dokument], tatsächlich : mutable.ArrayOps [Dokument] ' – Ken