Last active
December 14, 2015 20:18
-
-
Save amazari/5142652 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Par exemple, dans le pseudo-code suivant, tous les appels sont asynchrones mais séquentiels | |
les uns par rapport aux autres. | |
Si l'un d'entre eux échoue, la chaine d'appels s'arrete et 'pictures' est lui-meme considéré | |
comme un echec et contient l'erreur/exception du point d'abandon. | |
*/ | |
//'pictures' est ici une composition des différents appels différés (Future) | |
val pictures: Future[List[Picture]] = for { | |
userToken <- openIdProvider.auth (uri, secret, apiKey) // appel async distant | |
profile <- userService.profileFor(userToken) // appel async a notre BDD | |
pictures <- instagram.picturesFor (profile.instagramLogin) // appel async distant | |
} yield pictures | |
// Association de comportement en cas de succes ou echec de la chaine async | |
pictures onComplete { | |
case Success(pictures) => for (picture <- pictures) display(picture) | |
// t est l'exception levee a tout moment dans la chaine (probleme d'auth openid || profil non existant || souci instagram ) | |
case Failure(t) => println("An error has occured: " + t.getMessage) | |
} | |
// La definition precedente ne bloque pas et l'exection continue normalement | |
doSomethingElse() | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment