Si vous programmez depuis quelques temps en AS3, vous avez du vous rendre compte que les événements sont asynchrones, c’est à dire que l’on ne va pas avoir le résultat d’une fonction dès l’exécution de cette dernière terminée, mais au bout d’un temps indéterminé, et uniquement via une fonction qui collecte l’événement en question.
Hors il est parfois nécessaire d’avoir un certain ordonnancement dans les actions, en particulier lorsque l’on utilise des web services ou autre remoting.
Imaginons que l’on veut récupérer une liste de clients une fois que l’on a récupéré la liste des catégories de clients disponibles. Il existe 2 méthodes pour résoudre ce problème :
- Il suffit d’appeler la méthode de récupération des clients dans l’ »handler » de la fonction de récupération des catégories de clients.
- On utilise la méthode callLater(function, args);
Voici des exemples de codes mettant en place les 2 méthodes. (On assume ici que notre webservicesObject a un eventListener sur la méthode getCategoriesClients et un sur la méthode getClients() qui emmène respectivement sur categoriesClients_handler et clients_handler)
1ère méthode :
private function init():void {
webservicesObject.getCategoriesClients();
}
private function categoriesClients_handler(e:Event):void {
trace("Récupération des catégories de clients terminée");
webservicesObject.getClients();
}
private function clients_handler(e:Event):void {
trace("Récupération des clients terminée");
}
2ème méthode :
private var isCategoriesLoaded:Boolean : false;
private function init():void {
webservicesObject.getCategoriesClients();
webservicesObject.getClients();
}
private function categoriesClients_handler(e:Event):void {
trace("Récupération des catégories de clients terminée");
isCategoriesLoaded = true;
}
private function clients_handler(e:Event):void {
if(isCategoriesLoaded)
trace("Récupération des clients terminée");
else
callLater(clients_handler, e);
}
La fonction callLater(function, args) va donc rappeler notre handler en repassant en paramètre l’événement, de la même manière qu’a été déclenché l’événement par le webservice.
Articles sur le même sujet :

Merci beaucoup pour cette explication claire, elle m’a permit de voir la lumière face à la complexité de mes appels synchrones