Question

J'ai été chargé de la création d'un client AS3 pour un serveur HTML5 WebSocket.

Ma pensée initiale est de créer ce service en utilisant certaines des classes existantes en AS3, à savoir tenter d'imiter RemoteObject, mais ayant examiné, je ne vois vraiment pas le point de la AsyncToken!

Je comprends le jeton est utilisé comme une forme de référence entre l'appel du serveur et sa réponse, mais je ne peux pas voir où / comment il devient un identifiant unique.

Prenez ce petit morceau de code par exemple:

 var token:AsyncToken = myService.myCall(params);
 news.addResponder(new Responder(onResult, onFault));

 function onResult(event:ResultEvent) {
   // do stuff
 }

 function onFault(event:FaultEvent) {
   // do stuff
 }

Il est évident que le jeton a son propre répondeur, et le service peut garder un dictionnaire de jetons-messages, mais si je devais appeler myService.myCall deux fois, avant que soit répond, serait le savoir de service à associer à la réponse jeton? Est-ce que le service crée un identifiant unique à associer le dos de réponse au jeton, ou serait-il échouer dans ces circonstances?

Si elle ne stocke en interne son propre identifiant unique pour les appels, comment serait-il mieux que sauter le tout à jeton et passer le répondeur dans les paramètres d'appel? Par exemple.

 myResponder = new Responder(onResult, onFault);
 myService.myCall(myIResponder, <additional params>);

 function onResult(event:ResultEvent) {
   // do stuff
 }

 function onFault(event:FaultEvent) {
   // do stuff
 }
Était-ce utile?

La solution

Deux choses ressortent:

  1. Vous pouvez attribuer plus d'un répondeur à un AsyncToken;
  2. Vous pouvez lier le résultat de la AsyncToken.

Vous pourriez trouver ces deux choses utiles selon le type de données que vous travaillez avec ... il pourrait y avoir aussi plus à lui que cela.

Autres conseils

Pour des applications plus complexes, la AsyncToken vous permet d'avoir un peu plus de flexibilité dans quelles fonctions / fermetures / méthodes pour la réception des données ou des erreurs de manipulation.

public function mssqlQuery(sql:String,fid:String) : void {
    var http:HTTPService = new HTTPService;
    var parm:Object = new Object;
    parm.fas_sql = sql;
    parm.fas_db = mssql_db; 
    http.url = mssql_url+"?irand="+Math.random();
    http.showBusyCursor = true;
    http.request = sql;
    http.addEventListener(ResultEvent.RESULT, mssqlResult);
    http.addEventListener(FaultEvent.FAULT, mssqlFault);
    http.method = "POST";
    sqlToken = http.send(parm);
    sqlToken.param = fid;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top