Comment puis-je aplatir cette structure Future [T]?
Donné l'exemple suivant:
val handler : Connection = new DatabaseConnectionHandler()
val result : Future[Future[Future[Option[ResultSet]]]] = handler.connect
.map( (parameters) => handler )
.map( connection => connection.sendQuery("BEGIN TRANSACTION SERIALIZABLE") )
.map( future => future.map( query => query.rows ) )
.map( future => handler.sendQuery("COMMIT").map( query => future ) )
Est-il possible pour l'aplatir pour recevoir un Future[Option[ResultSet]]
à la fin à la place de cette future à l'intérieur d'un avenir à l'intérieur d'une future structure en Scala?
Je suis actuellement en utilisant Scala 2.10 Avenir et de Promesses, mais je ne peux pas trouver un moyen de. Je sais que je peux imbriquer les rappels, mais je préférerais éviter que depuis que le code va être horribles.
La Connection
trait de caractère est défini ici.
source d'informationauteur Maurício Linhares
Vous devez vous connecter pour publier un commentaire.
Chaque fois que vous
map
avec un argument de typeA => Future[B]
vous devez vraiment être à l'aide deflatMap
.Le code serait alors comme ceci:
Sinon, vous pourriez utiliser pour la compréhension. Il utilise
flatMap
pour vous.Vous devez utiliser un
flatMap
au lieu d'unmap
ici.La
flatMap
s'attend à une fonctionfun
retour d'un avenirg
et renvoie l'avenirh
le maintien de la valeur de l'avenirg
quefun
retourné.Aussi, envisager d'écrire dans un
for
-de la compréhension, de voir comment ici.