Faire plusieurs appels asynchrones à récupérer résultat de plusieurs services dans le simple clic d'un bouton flex?

StackOverflow https://stackoverflow.com/questions/4541281

Question

Dans l'un de notre projet, nous utilisons flex pour la fin avant, BlazeDS / java dans le back-end. Son un code existant où les services sont préconçus. Je dois faire des appels à 3 services dans le back-end (essentiellement 3 objets à distance) et d'obtenir leur résultat et stocker le résultat dans un objet et afficher les données de cet objet dans une vue. Maintenant, en fin avant que nous utilisons Flex et cadre Persil. Je pensais à la suite de démarches.

1) de faire des commandes pour chaque appel de service et stocker le résultat dans un objet partagé (modèle), puis l'affichage de ce modèle dans la vue. Dans cette approche, le problème est certains services sont nécessaires dans d'autres pages Web, mais ils DONOT besoin du même modèle.   Comment dois-je gérer ce scénario? Dois-je faire un appel asynchrone à distance et aller chercher le résultat, puis envoyer à nouveau et événement avec l'objet événement stocker le résultat.

2) Faire un appel de service, attendre le résultat alors effectuer un autre appel et attendre le résultat et faire autre appel, pas sûr si cela est la bonne?

Quelle est la meilleure solution pour gérer un scénario comme celui-ci. Merci pour votre aide.

Était-ce utile?

La solution

Alors, je suppose que je suis encore confus au sujet de ce que votre problème est, donc je vais essayer de répondre en disant à l'approche que je prendrais si j'avais trois appels non liés à faire à un back-end.

Je les licencier tous immédiatement après l'autre. Depuis les appels back-end dans Flex sont toujours asynchrones, ils reviennent immédiatement. Chacun de ces appels comprendra une fonction de rappel lorsque le résultat est renvoyé. Ainsi, dans le code pseudo (ish), ce serait quelque chose comme ceci:

makeRequest1(whenRequest1Finishes);
makeRequest2(whenRequest2Finishes);
makeRequest3(whenRequest3Finishes);

Dans ce cas makeRequest* est une méthode qui sait ce que le serveur / mécanisme est de faire l'appel et vous rappellerons à une fonction que vous avez défini un endroit appelé whenRequest*Finishes.

Si l'on suppose, maintenant qu'il ya trois parties différentes à votre interface utilisateur mise à jour séparément chacune de ces demandes, je remplir ces zones de l'interface utilisateur comme ils viennent. Je ne simplement les remplir, mais ... Je donne à l'utilisateur une indication qu'ils sont arrivés. Cela peut être une animation subtile des données « vol » ou un indicateur d'attente qui disparaît lorsque les émissions de données vers le haut. Au lieu de trois indicateurs d'attente distincts, vous pourriez faire un indicateur d'attente qui FILLES l'interface utilisateur entière qui ne disparaît pas jusqu'à ce que tous les trois sont reçus.

Quel que soit le cas, je ne fais jamais les appels de manière série les appels étaient SAUF SI dépendants les uns des autres. Utilisez le haut-asynchronisme Flex à votre avantage et faire trois appels en parallèle.

Est-ce que vous cherchez ???

Autres conseils

Vous pourriez avoir un seul objet qui détient les trois résultats des appels et de faire tout gestionnaire de réponse mis leur réponse dans l'objet et vérifier qu'ils ne sont pas le dernier appel d'arrivé.

Exemple:

classe ManyResult
var firstResult: *
var secondResult: *
var thirdResult: *

fonction get complète (): Boolean {return firstResult && && secondResult thirdResult; }

Dans chaque gestionnaire vous aurait cette logique générique:
  résultat Parse
  mettre dans l'objet analysé résultat ManyResult

si ManyResult.complete:
method_which_glues_all_three_results_together ()

Je recommande de ne pas utiliser cette solution si ce problème est fréquent qu'il obtient facilement en désordre. Je vous conseille de vous faire un code générique qui fait pour vous de manière standard propre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top