Ich versuche, diese Abfrage richtig zu bekommen, aber immer Fehler. Zunächst gibt searchUser eine Sequenz übereinstimmender UserEntries zurück, die eine eindeutige ID für den Benutzer enthalten, und für jede userID gibt es eine zweite Abfrage, die eine andere Benutzerinformation + Adresse aus einer anderen Tabelle erhält.Scala: Abfragen im Inneren für das Verständnis Fehler geben
Code:
def searchUsers(pattern: String) = auth.SecuredAction.async {
implicit request =>
usersService.searchUser(pattern) flatMap { usrList =>
for {
u <- usrList
ui <- usersService.getUsersWithAddress(u.id)
} yield {
Ok(views.html.UserList(ui))
}
}
}
Unterschriften für die APIs verwendet:
def searchUser(pattern: String): Future[Seq[UserEntry]] = ...
def getUsersWithAddress(userId: Long): Future[Seq[(UserProfile, Seq[String])]] = ...
Fehler:
[error] modules/www/app/controllers/Dashboard.scala:68: type mismatch;
[error] found : scala.concurrent.Future[play.api.mvc.Result]
[error] required: scala.collection.GenTraversableOnce[?]
[error] ui <- usersService.getUsersWithAddress(u.id)
[error] ^
[error] one error found
[error] (www/compile:compileIncremental) Compilation failed
Wenn ich kommentieren Sie Zeile "u < - usrList" und eine Benutzer-ID hard für die nächste Zeile wie "ui < - usersService.getUsersWithAddress (1L)" funktioniert es. Irgendeine Idee, was ich vermisse?
zu ändern, wenn ich u wickeln <- usrList mit Future.successful() Ich am Ende mit „Wert-ID ist kein Mitglied von Seq [models.UserEntry] ". Ich hatte gehofft, "du" ein Gegenstand zu sein, eher eine Sequenz. 2. Generator benötigt einen Verweis auf ein einzelnes Element - wie bekomme ich das (ich kann an traditionelle for-Schleife in nicht-funktionalen Sprachen denken, aber nicht hier ..) – srvy
folgte eine Kette von Antworten auf Ihre basiert und schließlich eine Lösung .. Da ich nicht in der Lage bin, ein formatiertes Stück Code in den Kommentar zu schreiben, werde ich es als meine Antwort hinzufügen - aber akzeptiere deine, um dir den richtigen Kredit zu geben! – srvy