Les appels de service Web sont asynchrones dans flex, mais je voulais envelopper un appel de service Web dans une classe pour assurer l'encapsulation synchrone. Quelque chose comme ci-dessous - l'utilisateur peut appeler getMyMethodResult et obtenir le résultat renvoyé par le service Web. Je m'attendais à ce que le thread qui recevait la réponse de savon peuplerait la variable _result et signifiait que getMyMethod, après un certain temps, trouverait _result n'est plus null. Mais ce n'est pas le cas! Quelqu'un peut-il expliquer pourquoi cela ne fonctionne pas?Programmation des appels de service Web synchrones dans flex
public class myClass
{
private var _result:Object;
public function myClass()
{
//create a web service object
...
// Add listener
_service.addMyMethodListener(myMethodListener);
}
public function getMyMethodResult()
{
_service.myMethod();
while (_result == null)
{
// count a variable or something (unimportant)
}
return _result;
}
private function myMethodListener(event:Event):void
{
_result = event.result;
}
}
Merci pour votre réponse. Je ne comprends toujours pas; Je pensais qu'ils couraient dans des fils différents? Comment le lecteur flash gère-t-il le retour asynchrone si ce n'est pas par un thread différent? Si la boucle d'événements gère tout, pourriez-vous expliquer l'ordre d'exécution de ces tâches? Merci –
BTW, je suis heureux de "laisser tomber l'idée", je me demandais juste pourquoi cela n'a pas fonctionné, donc je pourrais mieux comprendre la façon dont le lecteur flash/flex exploité. Je suis nouveau à flex! –
Le lecteur flash n'interrompt pas l'exécution de votre code lorsqu'il reçoit un tel événement. Ça va attendre jusqu'à la prochaine image, si je ne me trompe pas. L'implémentation en arrière-plan du lecteur utilise probablement un thread pour cela, mais place les événements en file d'attente pour que l'actionScript soit exécuté sur un seul thread. – sharvey