2010-01-28 11 views
2

OK J'ai un HTTPService qui exécute la fonction dataLoaded(e:ResultEvent):void chaque fois qu'il obtient un résultat d'un appel send().Flex: Annuler HTTPService.send()?

OK Si j'appelle HTTPService.send() puis appeler HTTPService.send() à nouveau avant que la précédente reçoit un résultat, je me retrouve à plusieurs reprises en cours d'exécution dataLoaded() ce qui est indésirable

Ce que je veux est si HTTPService.send() est appelé avant un appel précédent à ce renvoie un résultat. Je souhaite annuler le premier appel, et traiter uniquement le résultat du dernier appel à HTTPService.send()

J'espère que cela a du sens.

Comment puis-je faire ça?

Merci!

Répondre

5

En fait, HTTPService peut gérer cela pour vous. Il a une propriété concurrente, que vous devriez probablement définir pour "durer".

Plus d'infos ici: HTTPService#concurrency

+0

Salut à tous, Comment arrêter l'exécution du service HTTP lors c'est au milieu? Mon scénario; Je crée un service de recherche qui recherche un patient depuis la base de données depuis une entrée de texte frontale. Si l'utilisateur modifie le texte qu'il/elle a saisi avant d'envoyer à nouveau l'appel de service mais que je souhaite un résultat sur la base du dernier texte entré, le premier appel que j'envoie() que je souhaite détruire ou arrêter. Comment puis-je y parvenir? Merci à l'avance. –

+0

Voir: http://help.adobe.com/fr_FR/FlashPlatform/reference/actionscript/3/mx/rpc/http/HTTPService.html#cancel() –

6

HTTPService dispose d'une méthode d'annulation. Si vous l'appelez sans son paramètre, il devrait annuler le dernier appel du service. Essayez-le et voyez si vous obtenez toujours des ResultEvents non désirés.

Utilise l'existence de ASyncToken pour déterminer si l'annulation est appropriée.

private var _serviceCall:ASyncToken; 

function callMyService(stuff:Object):void { 
    if (_serviceCall !== null) { 
     myService.cancel(); 
     _serviceCall = null; 
    } 
    _serviceCall = myService.send(stuff) 
} 
+0

+1 parce que je ne pouvais pas accepter les réponses :) +1 –

+0

de moi aussi parce que c'est une bonne réponse :) –

+0

1 bonne réponse: P –

1

En plus de la réponse de Robert: Flex: Cancel HTTPService.send()?

HTTPService # semble être concurrency introduit jusqu'à ce que Flex 4, je ne trouve pas cela dans Flex 3. . Dans Flex 3., vous devez annuler l'appel précédent manuellement contrairement à concurrency = "last" dans Flex 4.

Notez que cela n'interrompra pas le processus du serveur que l'appel précédent invoque, cela signifie que le serveur peut encore venir sur une réponse cependant flex abandonner déjà.

+0

Mon erreur, j'ai trouvé cette propriété dans le dernier Flex 3.6, semble mon doc 3.x est assez vieux. –